• 背景


存储 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数据库服务。
  • 重启
  1. ​systemctl restart mysqld.service​
  2. 打开 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'

Mysql数据库存储emoji表情 windows版_windows

  • 后记
  1. 如果在使用代码连接时还有问题,使用连接编码也用​​character_set=utf8mb4​