Mysql-Uft8mb4

问题

在使用MySQL数据库存储数据的时候,意外发现不能存储Emoji表情😄。经过百度查证得知,mysql默认的 utf8 是三个字节的,存储不了四个字节的生僻字或者Emoji表情。需要换成支持四个字节的 utf8mb4 ,也就是UTF-8 most byte 4 。

解决

1
2
3
4
5
6
# 数据库更换字符集
ALTER DATABASE AchatUserService CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# 表更换字符集
ALTER TABLE friendship CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 需要改变的列进行更换字符集
ALTER TABLE messages CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

仅仅这样是不够的。在建立数据库连接的地方,还需要指定UTF-8字符集。比如在Spring boot项目的配置文件中,指定数据库连接的 url 处。

1
2
3
4
5
6
7
8
9
10
11
12
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/AchatUserService?serverTimezone=GMT%2B8&characterEncoding=utf-8 # here
username: root
password: xxxx
servlet:
multipart:
max-file-size: 100MB
max-request-size: 500MB
server:
port: 39939

不指定 utf-8 的话,估计默认是按照 utf8mb3 去连接的吧,这样是修改不了设置了 utf8mb4 字符集的数据的。(这可是重点所在)