MySQL无法存储Emoji表情,IPhone表情问题 。
今天有用户反馈,部分用户使用本站QQ
快捷登录后仍旧显示没登录,导致https://www.sojson.com/httpRequest/ 工具使用不了,开始以为是个别用户的浏览器版本问题,尝试了 Chrome , Firefox 等浏览器,还是不行。
然后和发现问题的用户使用Teamview
远程操作,我看线上日志,发现问题:
[ERROR][2017-02-22 13:44:35,624][druid.sql.Statement]{conn-10013, pstmt-30392} execute error. insert into so_xxxx (id, nickname, email,
portrait, password, security,
create_time, last_login_time,link,intro,address,job,qq,level)
values (?, ?, ?,
?, ?, ?,
?, ?,
?, ?, ?, ?, ?,?
)
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x8B\xF0\x9F...' for column 'nickname' at row 1
确定问题了,数据编码问题。进一步查证发现是 Mysql 的Utf-8
编码不支持Emoji
和IPhone
手机的一些表情符号。
UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。解决方案就是:将Mysql的编码从utf8转换成utf8mb4。(引入语句)
解决方案:
1.修改配置文件。
找到 Mysql 配置文件my.ini
或者是default.ini
配置文件。修改或者添加一下内容。
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
或者使用工具如下图
2. 修改环境变量。
以root
身份登录 Mysql ,修改环境变量,将character_set_client,
character_set_connection
,character_set_database
,character_set_results
,character_set_server
都修改成 utf8mb4 编码。
3. 将原来的表数据转换为 utf8mb4 编码。
alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin;
OK了,这是iPhone下输入的吻,拼音“wen”就会出来。
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/215.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。