MySQL 的字符集与排序规则

这玩意儿,简单说就是:
字符集:就是一套符号和编码的规则,比如汉字、英文字母等,得用二进制来存。

utf8 :MySQL老版本用的,只能存BMP范围内的字符,比如大部分汉字和符号。

utf8 mb4 :新版本,能存所有Unicode字符,包括表情符号。

排序规则:就是怎么比较和排序字符串的规则。

utf8 _unicode_ci:支持扩展字符比较,但不是完全准确。

utf8 _general_ci:速度快,但准确性不如utf8 _unicode_ci。

选哪个?看需求,要快就用utf8 _general_ci,要准就用utf8 _unicode_ci。
记得用utf8 mb4 ,兼容性更好。

MySQL中的字符集与排序规则详解

字符集决定存储编码,排序规则决定排序方式。

ASCII支持1 2 8 字符,只够英文用。
UTF-8 支持所有字符,1 -4 字节,互联网主流,用utf8 mb4 存emoji。
GB2 3 1 2 支持6 7 6 3 汉字,中文环境够用。
GBK是GB2 3 1 2 扩展,多1 4 000汉字,支持繁体。

排序规则用后缀区分: _ci不区分大小写,case不敏感。
_cs区分大小写,case敏感。
_bin按二进制比,严格区分每个字节。

utf8 _general_ci通用,但音调符号算一样。
utf8 _unicode_ci按Unicode排,多语言兼容,但慢点。
utf8 _bin二进制比,适用于精确匹配,如密码。
gb2 3 1 2 _chinese_ci按拼音排,中文场景常用。

多语言用utf8 mb4 +utf8 _unicode_ci。
中文用gbk+gb2 3 1 2 _chinese_ci。
密码用_bin或_cs。
要求不高用utf8 _general_ci快。

查选项用SHOWCHARACTERSET。
设计时定好规范。

你自己掂量。