Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql UTF-8:通用?箱子Unicode?_Mysql_Utf 8_Collation - Fatal编程技术网

Mysql UTF-8:通用?箱子Unicode?

Mysql UTF-8:通用?箱子Unicode?,mysql,utf-8,collation,Mysql,Utf 8,Collation,我试图找出我应该对各种类型的数据使用什么样的排序规则。我将存储的内容100%是用户提交的 我的理解是,我应该使用UTF-8通用CI(不区分大小写)而不是UTF-8二进制文件。然而,我找不到UTF-8通用CI和UTF-8 Unicode CI之间的明确区别 我应该将用户提交的内容存储在UTF-8 General或UTF-8 Unicode CI列中吗 UTF-8二进制文件适用于什么类型的数据 一般来说,utf8\u general\u ci比utf8\u unicode\u ci快,但不太正确 区

我试图找出我应该对各种类型的数据使用什么样的排序规则。我将存储的内容100%是用户提交的

我的理解是,我应该使用UTF-8通用CI(不区分大小写)而不是UTF-8二进制文件。然而,我找不到UTF-8通用CI和UTF-8 Unicode CI之间的明确区别

  • 我应该将用户提交的内容存储在UTF-8 General或UTF-8 Unicode CI列中吗
  • UTF-8二进制文件适用于什么类型的数据
  • 一般来说,utf8\u general\u ci比utf8\u unicode\u ci快,但不太正确

    区别如下:

    对于任何Unicode字符集,使用\u general\u ci排序规则执行的操作比使用\u Unicode\u ci排序规则执行的操作要快。例如,utf8_general_ci排序规则的比较比utf8_unicode_ci的比较更快,但正确性稍差。原因是utf8_unicode_ci支持诸如扩展之类的映射;也就是说,当一个字符与其他字符的组合相等时。例如,在德语和其他一些语言中,“ß”等于“ss”。utf8_unicode_ci还支持压缩和可忽略字符。utf8_general_ci是一种传统排序规则,不支持扩展、收缩或可忽略字符。它只能对字符进行一对一的比较

    引自:

    有关详细说明,请阅读MySQL论坛的以下帖子:

    至于utf8_bin:
    utf8_general_ci和utf8_unicode_ci都执行不区分大小写的比较。相反,utf8\u bin区分大小写(除其他差异外),因为它比较字符的二进制值。

    您还应该知道,使用utf8\u general\u ci作为唯一索引或主索引时,插入两个值(如“a”和“á”)会产生重复的键错误。

    真的吗,我用unique索引测试了在列中保存像“é”和“e”这样的值,它们在“utf8\u unicode\u ci”和“utf8\u general\u ci”上都会导致重复错误。您只能将它们保存在“utf8\U bin”整理列中

    和mysql文档(in)建议将其示例集“utf8\u general\u ci”排序

    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    
    • utf8\u bin
      盲目比较位。没有案件折叠,没有口音剥离
    • utf8\u general\u ci
      将一个码点与一个码点进行比较。它进行大小写折叠和重音去除,但不进行两个字符的比较;例如:
      ij
      在此排序规则中不等于
      ij
    • utf8\u*\ u-ci
      是一组特定于语言的规则,但与
      unicode\u-ci
      类似。一些特殊情况:
      ch
      ch
      ch
      ll
    • utf8\u unicode\u ci
      遵循旧的unicode标准进行比较<代码>ij=
      ij
      ,但是
      ae
      !=<代码>æ
    • utf8\u unicode\u 520\u ci
      遵循更新的unicode标准<代码>ae=
      æ
    有关在各种utf8排序规则中什么等于什么的详细信息,请参阅

    MySQL定义的utf8,仅限于1到3字节的utf8代码。这就省去了表情符号和一些汉字。因此,如果你想走出欧洲,你真的应该切换到
    utf8mb4

    经过适当的拼写更改后,以上几点适用于
    utf8mb4
    。今后,首选
    utf8mb4
    utf8mb4\u unicode\u 520\u ci

    • utf16和utf32是utf8的变体;它们几乎没有任何用处
    • ucs2比utf8更接近“Unicode”;这几乎没有用

      • 接受的答案已过时

        如果您使用MySQL 5.5.3+,请使用
        utf8mb4\u unicode\u ci
        而不是
        utf8\u unicode\u ci
        ,以确保用户键入的字符不会给您带来错误

        例如,
        utf8mb4
        支持emojis,而
        utf8
        可能会给您带来数百个与编码相关的错误,如:


        不正确的字符串值:“\xF0\x9F\x98\x81…”对于第1行的“数据”列

        我认为,如果您没有充分的理由使用unicode\u ci,那么就使用“general\u ci”。但这并不能真正深入地回答问题。这些排序规则之间到底有什么区别?您是对的,为了简单起见,这里不提供确切的区别。我在一篇文章中添加了一个链接,内容完全不同。NB
        show collation允许您查看每个字符集的默认排序规则。5.1将
        utf8\u general\u ci
        显示为
        utf8
        的默认值。是否有任何资源可以更深入地了解两种排序规则之间的实际速度差异?我们说的是性能下降0.1%还是下降10%?谢谢,这对于避免类似的用户名很有用(例如,如果“jose”存在,我不希望其他人创建“jose”用户)。注意:这对于大多数utf8排序规则(utf8_bin除外)也是适用的。最可靠/最安全/最全面的是
        utf8\u unicode\u ci
        我使用utf8\u bin,我希望在索引中区分何塞和何塞。例如,记录搜索/替换操作的列,其中用户可能已决定搜索josé并将其替换为jose。(我正在写一个电子表格程序)我对这个做了一个快速测试,结果似乎是准确的。当涉及到列上的唯一键和具有波浪号等的值时,这两个排序规则的行为都是相同的。@MirroredFate好的,我应该在那里添加,列应该具有导致此错误的唯一索引。这在我的回答中暗示了这一点。旁注:但是,对于完全的UTF-8支持,请使用
        utf8mb4
        而不是
        utf8
        。在这里发表评论是因为这个流行问题的答案并没有解决这个问题。如果您需要折叠大小写,但需要区分重音,请在.clic或