8:一般? 滨? Unicode的?

我试图弄清楚我应该使用什么样的排序来处理各种类型的数据。 我将要存储的100%内容是用户提交的。

我的理解是我应该使用UTF-8 General CI(不区分大小写)而不是UTF-8 Binary。 但是,我无法找到UTF-8通用CI和UTF-8 Unicode CI之间的明显区别。

  • 我应该将用户提交的内容存储在UTF-8 General或UTF-8 Unicode CI列中吗?
  • UTF-8二进制文件适用于什么类型的数据?

  • 通常,utf8_general_ci比utf8_unicode_ci更快,但不太正确。

    以下是区别:

    对于任何Unicode字符集, 使用_general_ci排序规则执行的操作比_unicode_ci排序规则更快 。 例如,比较utf8_general_ci排序比较比utf8_unicode_ci更快,但稍微不准确。 原因是utf8_unicode_ci支持扩展等映射。 也就是说,当一个字符比较与其他字符的组合相等时。 例如,在德语和其他一些语言中,“ß”等于“ss”。 utf8_unicode_ci也支持缩写和可忽略的字符。 utf8_general_ci是不支持扩展,缩小或可忽略字符的传统归类。 它只能进行字符之间的一对一比较。

    引自:http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html

    有关更详细的解释,请阅读MySQL论坛中的以下文章:http://forums.mysql.com/read.php?103,187048,188748

    至于utf8_bin:utf8_general_ci和utf8_unicode_ci都执行不区分大小写的比较。 相反, utf8_bin区分大小写 (其他区别),因为它会比较字符的二进制值。


    你还应该知道这样一个事实:使用utf8_general_ci时,如果使用varchar字段作为唯一索引或主索引,插入2个值(如'a'和'á')会导致重复键错误。


  • utf8_bin比较盲目的位。 没有折叠,没有口音剥离。
  • utf8_general_ci比较一个字节和一个字节。 它情况下,折叠和口音汽提,但没有2字符comparisions: ij不等于ij在此归类。
  • utf8_*_ci是一组特定于语言的规则,但是与unicode_ci类似。 一些特殊情况: ÇČchll
  • utf8_unicode_ci遵循旧的Unicode标准进行比较。 ij = ij ,但是ae != æ
  • utf8_unicode_520_ci遵循更新的Unicode标准。 ae = æ
  • 有关什么与各种utf8归类中的内容相同的详细信息,请参阅归类表。

    由MySQL定义的utf8仅限于1到3字节的utf8代码。 这留下了表情符号和一些中国人。 所以如果你想远远超过欧洲,你应该切换到utf8mb4

    以上几点适用于utf8mb4 ,经过适当的拼写更改。 展望未来,首选utf8mb4utf8mb4_unicode_520_ci

  • utf16和utf32是utf8上的变体; 他们几乎没有用处。
  • ucs2比“utf8”更接近“Unicode”; 它几乎没有用处。
  • 链接地址: http://www.djcxy.com/p/66357.html

    上一篇: 8: General? Bin? Unicode?

    下一篇: What is Unicode, UTF