- 记录微信用户信息的时候,有些用户的昵称使用的是emoij,出现以下错误
Error updating database. Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x92 \xF0...' for column 'nickname' at row 1
原因是创建数据库时使用的是utf-8编码,mysql支持的utf-8最大直接三个字节,而emoij表情是四个字节。
utf8mb4
- mysql在5.5.3b版本后增加了utf8mb4(most byte 4),这个才是真正的utf8,但由于平时大部分常用的汉字只有三个字节,为节省空间考虑可以只采用utf8
将项目修改为utf8mb4
1、修改数据库默认字符集
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
查看数据库默认字符集命令
show create database database_name;
2、改变原先表的字符集(改变数据库只对之后的新表起作用)
修改表默认的字符集和所有字符列的字符集
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 改完之后就可以插入了,看到有些说需要在配置中修改
#设置支持utf8mb4
spring.datasource.tomcat.initSQL=SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci
但我注释了之后也可以用