- 背景
存储 emoji 表情,因为 utf8 不支持,需要修改字符集
-
科普:
mysql默认的所占字节数是3个字节的,对于大部分语言来说比如说汉字什么来说是足够的,但是emoji表情有日本文字转化而来,其占了4个字节,所以在存储过程中,mysql就会报上图的错误。
-
方法步骤
修改配置文件
1. Linux系统找my.cfg文件,在windows系统下找my.ini 。
2. 修改以下两处
[mysqld]character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
3. 重启mysql数据库服务。
- 重启
systemctl restart mysqld.service
- 打开 cmd,输入 net stop mysql,然后在输入 net start mysql即可;
如果命令行重启方式不行的话,可以使用 window 的 启动任务管理器 中的服务选项卡进行重启。
-
注意
这里,修改成功后使用navicat直接插入,可能还是不能生效,navicat只有utf8编码,使用代码没有问题。 -
命令
一些查询字符集的命令
show variables like 'character_set_%';
show variables like 'collation_%';
设置session级别的命令
1、set character_set_client = utf8mb4;
2、set character_set_connection = utf8mb4;
3、set character_set_database = utf8mb4;
4、set character_set_results = utf8mb4;
查询连接使用的编码方式
SELECT T1.VARIABLE_NAME, T1.VARIABLE_VALUE, T2.PROCESSLIST_ID, concat(T2.PROCESSLIST_USER,"@",T2.PROCESSLIST_HOST), T2.PROCESSLIST_DB, T2.PROCESSLIST_COMMAND FROM PERFORMANCE_SCHEMA.VARIABLES_BY_THREAD T1, PERFORMANCE_SCHEMA.THREADS T2 WHERE T1.THREAD_ID = T2.THREAD_ID AND T1.VARIABLE_NAME LIKE 'character%' AND PROCESSLIST_ID ='9'
- 后记
- 如果在使用代码连接时还有问题,使用连接编码也用
character_set=utf8mb4