Maison > Applet WeChat > Développement WeChat > mysql enregistre les expressions emoji (surnom de l'utilisateur de développement WeChat ..)

mysql enregistre les expressions emoji (surnom de l'utilisateur de développement WeChat ..)

高洛峰
Libérer: 2017-02-15 10:47:28
original
2448 Les gens l'ont consulté

java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for colum n 'name' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)
Copier après la connexion

Lorsque l'erreur ci-dessus est signalée, il peut s'agir du type de champ dans le code Java et du champ tapez dans la base de données Ou l'encodage ne correspond pas. Dans ce cas, unifiez simplement le format ou l'encodage.

Ici, nous introduisons principalement l'erreur d'insertion d'images emoji dans la base de données et les solutions


Lors de l'utilisation de la base de données MySQL, si le jeu de caractères est UTF-8 et en java Sur le serveur, lors du stockage des expressions emoji, l'exception ci-dessus sera levée (par exemple, lorsque WeChat se développe pour obtenir des surnoms d'utilisateurs, les surnoms de certains utilisateurs utilisent des images emoji)

Il s'agit d'une exception due à le jeu de caractères ne le prend pas en charge, car le codage UTF-8 peut être de deux, trois ou quatre octets, dont les expressions Emoji sont de quatre octets, et le codage UTF-8 de MySQL peut contenir jusqu'à trois octets, les données ne peuvent donc pas être insérées. .
Solution :
1. Résolvez-le à partir du niveau de la base de données (la version de MySQL qui prend en charge utf8mb4 est 5.5.3 et doit être mise à niveau vers une version plus récente)
Remarque :
(1. Modifier la base de données , table, jeu de caractères de colonne

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;ALTER TABLE table_name CHANGE column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Copier après la connexion


(2. Modifier le fichier de configuration mysql my.cnf (la fenêtre est my.ini)

[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
Copier après la connexion


(3. Si vous utilisez un serveur java, mettez à niveau ou assurez-vous que la version de la connexion mysql est supérieure à 5.1.13, sinon vous je ne peux toujours pas essayer utf8mb4
(4. Serveur Le fichier de configuration de la base de données de fin

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE
jdbc.username=root
jdbc.password=password
Copier après la connexion


Si mysql -connector est mis à niveau, caractèreEncoding=utf8 peut être automatiquement reconnu. Il est utf8mb4 (compatible avec l'utf8 d'origine), et
autoReconnection (lorsque la connexion à la base de données est interrompue anormalement, se reconnectera-t-elle automatiquement ? La valeur par défaut est false) est fortement recommandée . Ignorer cet attribut peut provoquer une mise en cache.
Non lu En obtenant la dernière configuration de DB, il a été impossible d'essayer le jeu de caractères utf8mb4

2. Résolvez-le depuis l'application ;
Après avoir obtenu les données, les encoder avant de passer à l'inventaire des données :

URLEncoder.encode(nickName, "utf-8");
Copier après la connexion

Décodé lors de la récupération du base de données pour l'affichage,

URLDecoder.decode(nickname, "utf-8");
Copier après la connexion

Lors de la résolution du problème à partir de la couche application, il est recommandé de ne pas l'encoder directement dans les méthodes getter et setter d'objet, car la méthode setter encode le surnom lorsque l'objet est placé, ce qui équivaut à une fois inséré dans la base de données. Appelez la méthode getter à partir de l'objet pour extraire votre référence. Cela décodera le surnom codé par le setter, ce qui signifie. que le problème ci-dessus se produira toujours.

Plus de mysql enregistre les expressions emoji. (pseudonyme de l'utilisateur de développement WeChat..) Pour les articles connexes, veuillez faire attention au site Web PHP chinois

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal