mysql utf8_unicode_ci和utf8mb4_0900_ai_ci有什么区别

kognpnkq  于 2023-04-28  发布在  Mysql
关注(0)|答案(1)|浏览(414)

mysql中utf8mb4_0900_ai_ciutf8_unicode_ci数据库文本编码有什么区别(特别是在性能方面)?
更新:
utf8mb4_unicode_ci和utf8mb4_0900_ai_ci之间有类似的差异吗?

bkhjykvo

bkhjykvo1#

    • 编码 * 是相同的。也就是说,字节看起来相同。
    • 字符集 * 不同。utf8 mb 4有更多的字符。
    • 排序 *(比较的方式)是不同的。
    • 性能 * 是不同的,但它很少重要。

utf8_unicode_ci表示CHARACTER SET utf8,它只包含1、2和3字节的UTF-8字符。因此,它排除了大多数Emoji和一些中文字符。
utf8mb4_unicode_ci意味着CHARACTER SET utf8mb4是4字节CHARACTER SET utf8mb4的对应COLLATION
多年来,Unicode组织一直在改进规范。以下是从其“版本”到MySQL排序规则的Map:

4.0   _unicode_
5.20  _unicode_520_
9.0   _0900_
14.0  _uca1400_ai_ci etc.  as/ai and cs/ci (MariaDB-10.10, not MySQL)

大多数差异将出现在大多数人从未遇到过的领域。举个例子:在某种程度上,一个变化允许Emoji以某种方式区分和排序。
后缀(MySQL doc):

_bin      -- just compare the bits; don't consider case folding, accents, etc
_ci       -- explicitly case insensitive (A=a) and implicitly accent insensitive (a=á)
_ai_ci    -- explicitly case insensitive and accent insensitive
_as (etc) -- accent-sensitive (etc)

性能:

_bin         -- simple, fast
_general_ci  -- fails to compare multiple letters; eg ss=ß, so somewhat fast
...          -- slower
_900_        -- (8.0) much faster because of a rewrite

但是:排序规则的速度通常是查询中最小的性能问题。INDEXesJOINs、子查询、表扫描等对性能更为关键。

相关问题