时间:2023-04-21 14:59:062023-04-28 浏览:345
上面提到utf-8是在unicode的基础上做的优化,既然unicode有办法表示所有字符,那utf-8也一样可以表示所有字符,为了避免混淆,我在后面叫它大utf8。
mysql支持的字符集中有utf8和utf8mb4。
先说utf8mb4编码,mb4就是most bytes 4的意思,从上图最右边的Maxlen
可以看到,它最大支持用4个字节来表示字符,它几乎可以用来表示目前已知的所有的字符。
再说mysql字符集里的utf8,它是数据库的默认字符集。但注意,此utf8非彼utf8,我们叫它小utf8字符集。为什么这么说,因为从Maxlen可以看出,它最多支持用3个字节去表示字符,按utf8mb4的命名方式,准确点应该叫它utf8mb3。
utf8 就像是阉割版的utf8mb4,只支持部分字符。比如emoji
表情,它就不支持。
而mysql支持的字符集里,第三列,collation,它是指字符集的比较规则。
比如,"debug"和"Debug"是同一个单词,但它们大小写不同,该不该判为同一个单词呢。
这时候就需要用到collation了。
通过SHOW COLLATION WHERE Charset = 'utf8mb4';
可以查看到utf8mb4
下支持什么比较规则
如果collation = utf8mb4_general_ci
,是指使用utf8mb4字符集的前提下,挨个字符进行比较(general
),并且不区分大小写(_ci,case insensitice
)。
这种情况下,"debug"和"Debug"是同一个单词。
如果改成collation=utf8mb4_bin
,就是指挨个比较二进制位大小。
于是"debug"和"Debug"就不是同一个单词。