什么时候使用 utf8mb4 (bin, general_ci, unicode_520_ci)?
When to use utf8mb4 (bin, general_ci, unicode_520_ci)?
我对 MySQL 归类及其编码感到困惑,人们通常使用这三种归类之一:
- utf8mb_bin
- utf8mb4_general_ci
- utf8mb4_unicode_520_ci
我不明白的是何时在需要时使用这些排序规则中的每一个,例如,
A table 这样的名字
[id - name]
它只会包含来自不同语言的名称字符,例如 法语、德语、拉丁语。 . .
对于这样的 table 我是使用 utf8mb_bin
的排序规则还是坚持使用 utf8mb4_unicode_520_ci
,
另一方面,A table 例如博客的主题:
[id - title - subject]
我是将所有列排序规则设为 utf8mb4_unicode_520_ci
还是使用:
utf8mb_bin
对于 title
utf8mb4_unicode_520_ci
对于 subject
因为据我了解,utf8mb4_unicode_520_ci
中有一些表情可以用于博客主题,或者我只是忽略所有内容而只使用 utf8mb4_unicode_520_ci
?
但总的来说,使用这些不同的排序规则有什么意义?它们如何影响我在 SELECT
查询中的结果?
我想在 berif 中知道的是:
每个要使用的排序规则:
- 名字
- 头衔
- 科目
- 电子邮件
- BIOS
- 消息
- 用户名
您混淆了编码和整理。
可用字符由编码定义(且仅由编码定义)。由于 UTF-8 是与 Unicode 兼容的编码,因此您有 all 个字符。 MySQL 的特点是它的 utf8
编码并没有真正实现 UTF-8,而只是一个子集,因为它为每个字符分配 3 个字节,并且(截至今天)一些字符需要 4 个字节。于是utf8mb4
诞生了。
排序规则是一组规则,告诉您 WHERE foo = bar
和 ORDER BY foo
是如何工作的。你需要问问自己:如果我搜索 internet
,它应该匹配 Internet
吗?如果您存储法语、德语和拉丁语单词,您很可能不需要二进制排序规则。理想情况下,您需要一个具有您将要使用的语言的确切规则的规则,但是由于您正在混合使用多种语言,因此您将不得不选择通用排序规则。阅读 .
后,您可以做出明智的决定
我对 MySQL 归类及其编码感到困惑,人们通常使用这三种归类之一:
- utf8mb_bin
- utf8mb4_general_ci
- utf8mb4_unicode_520_ci
我不明白的是何时在需要时使用这些排序规则中的每一个,例如,
A table 这样的名字
[id - name]
它只会包含来自不同语言的名称字符,例如 法语、德语、拉丁语。 . .
对于这样的 table 我是使用 utf8mb_bin
的排序规则还是坚持使用 utf8mb4_unicode_520_ci
,
另一方面,A table 例如博客的主题:
[id - title - subject]
我是将所有列排序规则设为 utf8mb4_unicode_520_ci
还是使用:
utf8mb_bin
对于 title
utf8mb4_unicode_520_ci
对于 subject
因为据我了解,utf8mb4_unicode_520_ci
中有一些表情可以用于博客主题,或者我只是忽略所有内容而只使用 utf8mb4_unicode_520_ci
?
但总的来说,使用这些不同的排序规则有什么意义?它们如何影响我在 SELECT
查询中的结果?
我想在 berif 中知道的是:
每个要使用的排序规则:
- 名字
- 头衔
- 科目
- 电子邮件
- BIOS
- 消息
- 用户名
您混淆了编码和整理。
可用字符由编码定义(且仅由编码定义)。由于 UTF-8 是与 Unicode 兼容的编码,因此您有 all 个字符。 MySQL 的特点是它的 utf8
编码并没有真正实现 UTF-8,而只是一个子集,因为它为每个字符分配 3 个字节,并且(截至今天)一些字符需要 4 个字节。于是utf8mb4
诞生了。
排序规则是一组规则,告诉您 WHERE foo = bar
和 ORDER BY foo
是如何工作的。你需要问问自己:如果我搜索 internet
,它应该匹配 Internet
吗?如果您存储法语、德语和拉丁语单词,您很可能不需要二进制排序规则。理想情况下,您需要一个具有您将要使用的语言的确切规则的规则,但是由于您正在混合使用多种语言,因此您将不得不选择通用排序规则。阅读