【问题标题】:When to use utf8mb4 (bin, general_ci, unicode_520_ci)? [duplicate]何时使用 utf8mb4(bin、general_ci、unicode_520_ci)? [复制]
【发布时间】:2018-12-27 22:02:31
【问题描述】:

我对 MySQL 排序规则及其编码感到困惑,人们通常使用以下三种排序规则之一:

  1. utf8mb_bin
  2. utf8mb4_general_ci
  3. utf8mb4_unicode_520_ci

我不明白什么时候在需要时使用这些排序规则,例如,

这样的名字的表格

[id - name]

它只会包含来自不同语言的名称字符,例如 法语、德语、拉丁语。 . .

对于这样的表,我是使用utf8mb_bin 的排序规则还是坚持使用utf8mb4_unicode_520_ci

另一方面,例如博客主题的表格:

[id - title - subject]

我是把所有的列归类到utf8mb4_unicode_520_ci还是使用:

utf8mb_bintitle

utf8mb4_unicode_520_cisubject

据我了解,utf8mb4_unicode_520_ci 中包含一些可用于博客主题的表情,还是我只是忽略所有内容而只使用utf8mb4_unicode_520_ci

但总的来说,使用这些不同的排序规则有什么意义?它们如何影响我在SELECT 查询中的结果?

我想在 berif 中了解的是:

每个使用什么排序规则:

  1. 名字
  2. 标题
  3. 主题
  4. 电子邮件
  5. 个人简介
  6. 消息
  7. 用户名

【问题讨论】:

标签: mysql character-encoding collation utf8mb4


【解决方案1】:

您混淆了编码和排序规则。

可用字符由编码定义(并且只有编码)。由于 UTF-8 是与 Unicode 兼容的编码,因此您有 所有 个字符。 MySQL 的特点是它的utf8 编码并没有真正实现 UTF-8,而只是一个子集,因为它为每个字符分配 3 个字节,并且(截至今天)某些字符需要 4 个字节。于是utf8mb4诞生了。

排序规则是一组规则,告诉您WHERE foo = barORDER BY foo 如何工作。你需要问自己:如果我搜索internet,它应该匹配Internet吗?如果您存储法语、德语和拉丁语单词,您很可能不需要二进制排序规则。理想情况下,您想要一个具有您将使用的语言的确切规则的语言,但是,由于您正在混合语言,因此您必须选择通用排序规则。阅读Difference between utf8mb4_unicode_ci and utf8mb4_unicode_520_ci collations后,您可以做出明智的决定。

【讨论】:

  • 所以你的意思是,如果我想要搜索的准确性,那么 Binary Collation 是最好的使用方法,但如果它是我希望它可以搜索且易于访问的东西 í被视为i,然后unicode_ci 更好,因为它不区分大小写?
  • 我不是这么说的。二进制表示eEé 完全不同,é 字符不同于e´ 的组合。那更准确吗?这取决于你需要什么。
  • 那么这些排序规则在用法上有什么不同呢?为什么&何时有人使用Binary 而不是unicode_ci,反之亦然?
猜你喜欢
  • 2022-01-23
  • 2018-05-13
  • 1970-01-01
  • 2019-10-14
  • 2019-08-22
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多