sunmaobin / sunmaobin.github.io

blog
https://github.com/sunmaobin/sunmaobin.github.io
174 stars 11 forks source link

经验分享-让MySQL支持Emoji表情 #59

Open sunmaobin opened 5 years ago

sunmaobin commented 5 years ago

一、修改MySQL的配置文件

MySQL的配置文件 my.cnf ,所在位置一般在:/etc/my.cnf,如果不在这个目录下,可以搜索下:whereis my.cnf

修改每个对应项为 utf8mb4 编码:

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
character-set-client-handshake = false

修改完成后,重启MySQL,然后查看配置是否生效:

SHOW VARIABLES LIKE 'character_set_%'

如果打印结果如下,则表示配置生效:

character_set_client    utf8mb4
character_set_connection    utf8mb4
character_set_database  utf8
character_set_filesystem    binary
character_set_results   utf8
character_set_server    utf8mb4
character_set_system    utf8
character_sets_dir  /usr/share/mysql/charsets/

二、修改数据库表和字段的编码

要使得某个表、某个字段支持Emoji,就修改表的编码、字段的编码为 utf8mb4

# 修改表的编码
ALTER TABLE `my_table` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# 修改字段的编码
ALTER TABLE `my_table` MODIFY COLUMN `my_column` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

三、(可选)修改Sequelize的配置编码

如果你的数据库表是通过Sequelize这种ORM自动生成,那么需要修改其默认的编码。 如果数据库表是自己创建的,则可以不用管Sequelize的配置。

options: {
   dialect: "mysql",
   dialectOptions: {
       charset: "utf8mb4",
       collate: "utf8mb4_unicode_ci",
       supportBigNumbers: true,
       bigNumberStrings: true
    }
}
Riteam commented 5 years ago

wow