记一次存储emoji表情问题
记一次存储emoji表情
问题原因
-
mysql常用的字符集如下
字符集: utf8mb3 排序规则: utf8mb3 general_ci # 上面的字符集就是我们所说的普通的utf-8 字符集:utf8mb4 排序规则:utf8mb4 0900 ai ci
-
上述两种字符集想要存储emoji需要使用utf8mb4这种字符集
-
查询数据库的字符集
SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = 'your_database_name';
-
查询表的字符集
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA WHERE CCSA.collation_name = T.table_collation AND T.table_schema = 'your_database_name' AND T.table_name = 'your_table_name';
-
查询字段的字符集
SELECT character_set_name FROM information_schema.`COLUMNS` WHERE table_schema = 'your_database_name' AND table_name = 'your_table_name' AND column_name = 'your_column_name';
如果上述查询结果又任何一项不是utf8mb4都无法写入emoji
问题解决方法
使用命令行修改字符集
-
更改数据库字符集
ALTER DATABASE your_database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
-
更改表字符集
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
更改字段字符集
ALTER TABLE your_table_name MODIFY your_column_name TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
使用dbeaver修改字符集
-
双击数据库名称,会出现如下内容,将图中标红的修改utf8mb4字符集,排序规则会随之改变
-
双击数据表名称,会出现如下内容,将图中标红的修改utf8mb4字符集,排序规则会随之改变
-
双击表字段名称,会出现如下内容,将图中标红的修改utf8mb4字符集,排序规则会随之改变
修改数据库连接方式
项目框架是django,这里以django配置为例
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': env("DB_NAME"),
'USER': env("DB_USER"),
'PASSWORD': env("DB_PASSWORD"),
'HOST': env("DB_HOST"),
'PORT': env("DB_PORT"),
# 需要在此处增加以下配置,修改数据库的连接方式为utf8mb4
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': "SET NAMES utf8mb4; SET CHARACTER SET utf8mb4; SET character_set_connection=utf8mb4;",
},
}
}