MySQL報錯: Incorrect string value: '\xF0\x9F\x98\x9C \xE9...' for column 'Nickname' at row 1


    上午,開發和我說某表有時插入報:Incorrect string value: '\xF0\x9F\x98\x9C \xE9...' for column 'Nickname' at row 1,我的第一反應是:難道是sql_mode的問題。后來經排查是:字符集的問題。因為用戶錄入了表情字符。utf8字符編碼不支持

Emoji表情存儲。UTF-8編碼有可能是兩個、三個、四個字節。Emoji表情是4個字節,而Mysql的utf8編碼最多3個字節,所以數據插不進去。

解決方案:將Mysql的編碼從utf8轉換成utf8mb4。

1.修改配置文件my.cnf
character-set-server=utf8mb4
2、將已經建好的表轉換成utfbmb4
命令:ALTER TABLE `TABLE_NAME` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; (將TABLE_NAME替換成你的表名)
3、將需要使用emoji的字段設置類型為utf8mb4
ALTER TABLE WU_WeChatUser  MODIFY COLUMN `Nickname` text  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci  COMMENT '用戶的昵稱' ;

 

 

 

總結:后續又實際測試了一遍,1)set names utf8mb4(在命令行可以動態修改)     2)修改該字段為utf8mb4_general_ci    3)修改配置文件:character-set-sever(重啟永久生效)

注意:本次測試我只按以上步驟修改,並未修改表的字符集,  數據庫的字符編碼的優先級: 列>表>庫

 

查看 MySQL 數據列(column)的字符集。

mysql> show full columns from WU_WeChatUser;
+-------------+--------------+--------------------+------+-----+-------------------+----------------+---------------------------------+-----------------------------------------------------------------------+
| Field       | Type         | Collation          | Null | Key | Default           | Extra          | Privileges                      | Comment                                                               |
+-------------+--------------+--------------------+------+-----+-------------------+----------------+---------------------------------+-----------------------------------------------------------------------+
| Id          | int(10)      | NULL               | NO   | PRI | NULL              | auto_increment | select,insert,update,references | 主鍵Id                                                              |
| Subscribe   | tinyint(3)   | NULL               | YES  |     | 1                 |                | select,insert,update,references | 用戶是否訂閱該公眾號1:是 2:否                         |
| Openid      | varchar(100) | utf8_general_ci    | NO   | MUL | NULL              |                | select,insert,update,references | 用戶openId                                                          |
| Nickname    | varchar(200) | utf8mb4_general_ci | YES  |     | NULL              |                | select,insert,update,references | 用戶的昵稱                                                       |
| Sex         | int(5)       | NULL               | YES  |     | 0                 |                | select,insert,update,references | 用戶的性別,1男,2女,0未知                               |
| Language    | varchar(50)  | utf8_general_ci    | YES  |     | NULL              |                | select,insert,update,references | 用戶的語言                                                       |
| Province    | varchar(100) | utf8_general_ci    | YES  |     | NULL              |                | select,insert,update,references ||
| City        | varchar(100) | utf8_general_ci    | YES  |     | NULL              |                | select,insert,update,references ||
| Country     | varchar(100) | utf8_general_ci    | YES  |     | NULL              |                | select,insert,update,references | 國家                                                                |
| SourceIndex | int(10)      | NULL               | NO   | MUL | 0                 |                | select,insert,update,references | 渠道來源索引,0:未知來源,其余值取自WU_WeChat_SourceType |
| OperateTime | varchar(100) | utf8_general_ci    | YES  |     | NULL              |                | select,insert,update,references | 操作時間                                                          |
| CreateTime  | timestamp    | NULL               | NO   |     | CURRENT_TIMESTAMP |                | select,insert,update,references | 創建時間                                                          |
+-------------+--------------+--------------------+------+-----+-------------------+----------------+---------------------------------+-----------------------------------------------------------------------+
12 rows in set (0.00 sec)


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM