×

mysql下emoji存储

96
michaellct
2017.02.23 15:16* 字数 303

问题描述

emoji表情是通用的unicode字符串,不需要第三方工具支持,就可以显示丰富的表情图标,emoji表情由4个字节组成,mysql的utf8是3个字符,因此当emoji表情存入mysql数据库时会报错。

解决方案

  • utf8mb4的最低mysql版本支持版本为5.5.3+

  • 在终端下:mysql -V
    在mysql中:mysql> status;
    使用mysql的函数:select version();
    
  • 修改Database、Table、Column字符集,参考如下语句:

  • -- For each database:
    ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
    -- For each table:
    ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    -- For each column:
    ALTER TABLE table_name MODIFY COLUMN name varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
  • 修改MySQL的配置文件my.cnf,windows下为my.ini或my-default.ini。修改完成后重启MySQL服务

  • [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
    
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    
  • 校验字符集

  • SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
    需要保证如下变量为utf8mb4
    character_set_client
    character_set_connection
    character_set_database
    character_set_results
    
utf8mb4.png
  • 至此数据库端就设置完毕

    emoji-test.png
  • 修改后端程序的数据库连接字符串的charset为utf8mb4即可

mysql
Web note ad 1