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