TABLE OF CONTENTS
MySQL默认的字符编码为什么不支持表情存储
UTF-8编码规范是一种可变长度的字符编码(1~4字节),emoji表情需要4个字节存储,正常来说UTF-8规范的字符集应该可以存储emoji表情。MySQL 5.7版本默认字符集为utf8,排序规则为utf8_general_ci,utf8字符集实际上是一个不完整的 UTF-8 实现,只能存储最多 3 个字节的字符。可以说无法存储emoji表情是MySQL的锅,当然它提供了UTF-8的完整编码实现:utf8mb4字符集。
拓展下:UTF-8中的8是说每个字符的编码单位是8位,一个英文字符占用一个字节的存储空间,一个中文(含繁体)占用三个字节的存储空间。
查看当前MySQL默认的字符集和编码
1 | -- select version(); 可查看当前mysql版本,本地测试的mysql使用的5.7,输出示例如下: |
查看某个数据库或者表的编码
1 | SHOW CREATE DATABASE sakila; |
MySQL如何存储表情
解决方案呼之欲出了,即使用UTF-8的完整编码实现:utf8mb4字符集。因此,建议建库时显式地设置字符集utf8mb4,排序规则根据大小写是否敏感选择。
检查字符集和排序规则的默认配置
1 | -- 检查MySQL的字符集和排序规则的默认配置 |
创建数据库或表时指定字符集+排序规则(大小写是否敏感)
1 | CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
创建、修改表的字符集和排序规则
1 | CREATE TABLE mytable ( |
修改表字段的字符集和排序规则
1 | ALTER TABLE mytable MODIFY content VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
附字符集查询常用命令
1 | -- 查询支持的字符集 |
声明:本站所有文章均为原创或翻译,遵循署名 - 非商业性使用 - 禁止演绎 4.0 国际许可协议,如需转载请确保您对该协议有足够了解,并附上作者名 (Tsukasa) 及原文地址