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)
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;
(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'
(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
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");
Décodé lors de la récupération du base de données pour l'affichage,
URLDecoder.decode(nickname, "utf-8");
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