SpringBoot2昵称支持emoji(mysql)
新建的用户表中,昵称需要支持emoji,再向表中插入数据时,发生异常:
java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x98\x83\xF0\x9F...‘ for column
产生问题原因
新建的用户表,使用的是utf8字符集编码,mysql实现utf8编码时,最大长度为3个字节,包含了绝大多数的国际字符,但并不是所有,而emoji,需要4个字节才能编码。
MySQL在 5.5.3 之后增加了utf8mb4字符编码,能够使用4个字节存储更多的字符。
问题解决方法
- 修改表或字段的字符编码
- java驱动检查
- 增加数据源配置项
修改表或字段的字符编码
修改表的字符集编码
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
修改字段的字符集编码
ALTER TABLE table_name MODIFY COLUMN column_name text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Java驱动检查
MySQL读写emoji,MySQL驱动版本要在 5.1.13 及以上版本,数据库连接依然是 characterEncoding=UTF-8
java驱动会自动检测服务端 character_set_server
的配置,如果为utf8mb4,驱动在建立连接的时候设置 SET NAMES utf8mb4
数据源配置
如果服务端 character_set_server
的配置,不为utf8mb4,则需要增加数据源配置
# 指定连接被创建,再被添加到连接池之前执行的sql spring.datasource.connection-init-sql=SET NAMES utf8mb4
相关推荐
ailxxiaoli 2020-11-16
austindev 2020-06-28
fujuan000 2020-04-30
Andrea0 2020-01-14
Trustport 2019-12-01
coinone 2019-10-29
boox 2018-10-25
TinyDolphin 2019-10-30
happinessaflower 2019-10-26
xuefeng0 2015-04-13
haixianTV 2015-08-30
yzhj00 2017-11-23
AxDoctor 2016-04-12
quanhaoH 2012-04-21
85206537 2015-09-19
88286530 2015-09-19
81246831 2015-08-24
chh 2015-05-05