mysql儲存emoji表情報錯處理,qq互聯mysql儲存暱稱中帶表情的資料時報錯。
阿新 • • 發佈:2018-12-17
前言
做qq互聯登入時發現一個問題,如果qq暱稱中有表情時存入mysql資料庫會報錯。
java.sql.SQLException: Incorrect string value: "ð" 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)
原因是:mysql的utf8編碼的一個字元最多3個位元組,但是一個emoji表情為4個位元組,所以utf8不支援儲存emoji表情。但是utf8的超集utf8mb4一個字元最多能有4位元組,所以能支援emoji表情的儲存。
解決方法
1.修改mysql 配置檔案/etc/my.cnf(window為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"
注意:mysql支援utf8mb4的版本是5.5.3+,必須升級到較新版本
2.修改database,table,column字符集
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;
3.java語言修改db配置檔案
jdbc_driverClassName =com.mysql.jdbc.Driver jdbc_url=jdbc:mysql://localhost:3306/databaseName?useUnicode=true&autoReconnect=true&rewriteBatchedStatements=TRUE jdbc_username=root jdbc_password=root
其中的characterEncoding=utf8可以自動被識別為utf8mb4(相容原來的utf8),而
autoReconnection(當資料庫連線異常中斷時,是否自動重新連線?預設為false)強烈建議配上,忽略這個屬性,可能導致快取緣故 ,
沒有讀取到DB最新的配置,導致一直無法試用utf8mb4字符集;
記得要去掉characterEncoding=UTF-8”,因為mysql.cnf中已設定了init_connect="SET NAMES utf8mb4",否則還是不能儲存哦
4.重啟mysql服務 檢查是否配置成功
mysql> show variables like "%char%";
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
然後就可以愉快的登入啦。
原文地址:https://www.wanpishe.top/detail?blogId=1f422a92-a957-4132-a405-a702484490b6