由于mysql默认的utf8其实是三个字节,所以如果字段里有emoji表情,就会放不进去数据库,报错形如
Internal Exception: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x94\xA5' for column 'result' at row 1
这样\x一串的提示就是emoji
这就需要设置字符集成utf8mb4指定四个字节
坑人的地方是它需要在各个角落都手动写这个设置,我几个月之前就被这个折腾了一晚上,把库、表、jdbc的链接都改了,但是就是放不进去。这次又遇见结果改了一下列就解决了
这里我把我修改的地方都列出来供参考
1、mysql配置文件:my.ini(如果是linux这个文件的名字不一样,自己搜一下吧)
[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
#collation-connection = utf8mb4_unicode_ci
#注意,这个地方的connection改了的话重启直接就打不开数据库了,需要其他办法改,原理未知
init_connect='SET NAMES utf8mb4 COLLATE utf8mb4_general_ci '
2、workbench修改、检验
执行:set collation_connection = utf8mb4_general_ci
检验:输入SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
应当得到
3、对于库:
两个小按钮都点进去,应当是
4、对于表:
点中间的小扳手,进入到
(忽略p站XD)
5、将表中可能放进去emoji的列修改,以前没成功就是这一步没做
还是上一步的界面,点中间cloumn name那个表格,选中之后在图中的下面部分,同样把charset那俩修改成这样的uft8mb4
(在mysql这个图形化的界面里 改完都记得点右下角apply哈)
6、到这里数据库设置就解决了,Spring boot的设置我感觉不是很关键,不过还是放一下
spring.datasource.url=jdbc:mysql://localhost:3306/库名?useUnicode=true&character_set_server=utf8mb4&serverTimezone=CST&autoReconnect=true
注意:不保证这是最方便的办法,只不过这是我折腾半天之后确定能跑的一套设置,大概率是有多余不必要的修改步骤的——跑起来就行.jpg