java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' 数据库存储表情报错

现在很多人都喜欢用 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的配置文件也需要做相应的修改才能生效

猜你喜欢

转载自blog.csdn.net/Jioho_chen/article/details/81988315