1. MySQL 中存储 Emoji
MySQL 使用 utf8
字符集存储字符串时,如果字符串中包含 Emoji
表情,就会提示如下错误:
1 | 1366 - Incorrect string value: '\xF0\x9F\x98\x80' for column 'content' at row 1 |
UTF-8 编码长度为 1 ~ 4 字节,其中 Emojo 表情是4字节,而MySQL的utf8字符集最多支持3个字节,所以会报错。
2. MySQL 设置区分大小写
MySQL 中 VARCHAR
类型的字符集一般设置成 utf8
或 utf8mb4
,然而 MySQL 默认是对大小写不敏感(不区分大小写),如果想要 MySQL 区分大小写需要设置排序规则,规则详解如下:
在 MySQL 中存在着各种排序规则:
utf8_bin
将字符串中的每一个字符用二进制数据存储,区分大小写。utf8_genera_ci
不区分大小写,ci为case insensitive的缩写,即大小写不敏感。utf8_general_cs
区分大小写,cs为case sensitive的缩写,即大小写敏感。
用 utf8_genera_ci
没有区分大小写,导致这个字段的内容区分大小写时出问题,比如作为区分大小写的code或者验证码时就出问题了。
utf8_general_cs
这个选项一般没有,所以只能用utf8_bin区分大小写。
1 | CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci |