前一段时间,项目中需要在数据库中存储emoji,由于编码格式不对,直接导致数据库报错,后来修改mysql的编码,就解决了
emoji符号实际上是文本,并不是图片,它们仅仅显示为图片
在mysql5.5.3或更高的版本才支持
确定数据库支持存储表情后,可以修改数据库的默认编码,这样以后再建数据库的话,就不用考虑存emoji这个问题了
在mysql 的配置文件 my.cnf 或 my.ini 配置文件中修改如下:
[client] default-character-set = utf8mb4 [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
重启MySQL,然后使用以下命令查看编码,应该全部为utf8mb4
(character_set_filesystem和character_set_system除外):
mysql> show variables like ‘%char%‘; +--------------------------+--------------------------+ | Variable_name | Value | +--------------------------+--------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql-5.7.... | +--------------------------+--------------------------+ 8 rows in set (0.00 sec)
使用命令查看collation设置,应该全部是utf8mb4_general_ci
:
mysql> show variables like ‘%coll%‘; +----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci | +----------------------+--------------------+ 3 rows in set (0.01 sec)
如果character_set_database
还是为utf8
,需要重启服务器。
现在,MySQL就可以正确存储emoji字符了。
但是如果是之前已经建好的数据库怎么办呢?
可以使用 mysql命令
ALTER TABLE 表名 DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
来更改已有的数据库表的编码
参考地址:https://www.liaoxuefeng.com/article/00145803336427519ae82a6c5b5474682c0c4ba5b47fb33000
时间: 2024-10-25 19:00:42