有emoji的地方就有了注意事项

emoji是啥?

下面是摘自维基百科的一段解释:


绘文字(英语:emoji,日语:絵文字/えもじ emoji)是使用在网页和聊天中的形意符号,最初是日本在无线通信中所使用的视觉情感符号(图画文字)。意指图形,文字则是图形的隐喻,可用来代表多种表情,如笑脸表示笑、蛋糕表示食物等。在中国大陆,绘文字通常叫做“小黄脸”,或者叫emoji。

太抽象?其实emoji就是我们使用了多年的QQ、微信里的表情符号。

有emoji的地方就有了注意事项

emoji表情符号

emoji引发的问题

emoji给我们带来了传图达意的便捷,但是却令开发者很头疼,插入数据库报错:Incorrect string value: \\xF0\\x9F\\x98\\x84\\xF0\\x9F

项目中有一部分要与微信打交道,需要获取扫码用户的昵称信息,而有些用户昵称里含有表情符号,当插入mysql数据库时,就报出了Incorrect string value的错误。

错误原因

mysql数据库默认采用了utf8字符集,utf8字符集最多支持三个字节,而emoji占用4个字节的存储空间,所以在存入数据库时,就引发了错误。

自从mysql 5.5.3版本后,有了一种每个字符使用4个字节的字符集utf8mb4,utf8mb4是utf8的一个超集,兼容utf8,所以将字符集由utf8转为utf8mb4即可解决这个问题。

解决方案

1. 修改mysql配置文件my.cnf(windows server的话,修改my.ini),增加以下设置

[client]

default-character-set = utf8mb4

[mysql]

default-character-set = utf8mb4

[mysqld]

character-set-server = utf8mb4

2. 按需修改数据库、表、字段的字符集

-- 修改数据库字符集

ALTER DATABASE databaseName CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;

-- 修改表字符集

ALTER TABLE tableName CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

-- 修改列字符集

ALTER TABLE tableName CHANGE columnName VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

3. 改动后重启mysql数据库即可

注意:

如果你使用的是云数据库,那么会有稍许区别,以腾讯云为例:找到MySQL数据库,在实例列表,参数设置部分,找到character_set_server参数,默认是latin1,点击修改,将其改动为utf8mb4,改动完保存后,会自动重启mysql数据库以使修改生效。重启完成后,通过客户端连接,改动相应的表或者数据库字段为utf8mb4即可。

有emoji的地方就有了注意事项

腾讯云mysql

总结

  1. 由于mysql 5.5.3版本才增加了utf8mb4字符集,如果低于该版本,需要先进行升级,并评估是否影响已有生产环境。

  2. 在项目之初选择mysql服务器时,应根据项目需要提前规划mysql的版本以及字符集,如果有需要,提前将其设置为utfmb4字符集。

  3. 云服务器将这些参数全部界面化了,如果通过命令行改动不了(没有权限等错误),就考虑到应该在界面上进行操作,而不要一个劲的去排查为啥没有权限。


分享到:


相關文章: