关于MySQL中默认字符集utf8和utf8mb4有关设置
原因:UTF-8 编码是一种变长的编码机制,可以用1~4个字节存储字符。
因为历史遗留问题,MySQL 中的 utf8 编码并不是真正的 UTF-8,而是阉割版的,最长只有3个字节。当遇到占4个字节的 UTF-8 编码,例如 emoji 表情字符或者复杂的汉字,会导致存储异常。
解决:
1.查看默认字符集:
mysql> show variables like "%char%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
2.修改MySQL 的配置文件my.cnf(一般在服务器端,且修改多个文件,方法不建议采用)
3.创建数据库时指定字符集为 utf8mb4,作者本人喜欢使用:
CREATE DATABASE mydbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
备注:字符除了需要存储,还需要排序或比较大小。推荐用 utf8mb4_unicode_ci