现在很多人都喜欢用 emoji表情作为名称
在开发小程序存储用户登录信息的时候,存储用户名称一直报错:
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94'
这是因为之前数据的utf8只能存储3个字节,而 emoji表情有些需要占4个直接,所以数据库存储不了,报错了。
解决方案:
1、要想解决emoji表情表情的问题,需要使用utf8mb4
编码。而这种编码格式需要在mysq5.5以上版本才有。
2、和绝大多数教程一样,找到需要存储的库、表、存储字段 修改utf8mb4编码。如图:
3、修改完上面后,就已经完成了第一步,第二步需要修改mysql的配置才能生效,在修改之前可以看下自己的mysql配置,在mysql终端/mysql管理工具运行:
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
很多人运行了之后,其实配置中的编码并不是utf8mb4的。而是默认的utf8甚至是其他的编码。
以下是我测试过正确的配置的截图:
4、修改mysql的编码配置:
1)linux平台下:
vi /etc/my.cnf
#在mysq.cnf中,找到相关的配置(比如找到[client] 在下面添加相关的配置)
如果linux下的配置文件没有[client]之类的配置,
那么直接把下面这段复制加入配置文件中即可:
[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
service mysqld restart
在使用第3步中的查询语句,看到字符编码改过来,那就算是真正可以了
2)window平台下:
找到my.ini
配置文件(通常在C:\ProgramData\MySQL\MySQL Server 5.6
目录下)
也是和linux配置一样,找到对应的节点,加入相关的配置,和linux平台操作类似,然后重启mysql服务。
在调用接口,就发现字符已经可以存进来了,部分字符可能会显示口字,可是并不影响使用,亲测有效
切记:在修改了mysq存储字段的编码后,mysql的配置文件也需要做相应的修改才能生效