王炸科技头像

MySQL的utf8

来源:
       

  一般的解说是utf8_general_ci速度较快,utf8_unicode_ci准确性较好…但快在那里,又好在什么地方呢?首先就其准确性说,这世界上有无数种文字,除了通用的英文使用我们较熟悉的A-Z字符外,还有很多种近似的写法用于法文、德文、俄文等等…光是一个

  一般的解说是utf8_general_ci速度较快,utf8_unicode_ci准确性较好…但快在那里,又好在什么地方呢?

  首先就其准确性说,这世界上有无数种文字,除了通用的英文使用我们较熟悉的A-Z字符外,还有很多种近似的写法用于法文、德文、俄文等等…

MySQL的utf8-第1张图片

  光是一个A字就有数十种不同表现

  为什么不都用同一种A呢,几十种多麻烦啊。事实上,它们在所属的文字上都各有意义,可能代表不同的发音,也可能是其他东西。在某些语言上,同一个单词不同发音可能就代表两个意思。校对规则

  utf8_unicode_ci及utf8_general_ci的用途就是对那些看起来不一样的字符进行转换,令我们进行排序比对时更方便准确。

  以下面为例,直接看起来是不相等的,但在实际应用上是成立的,这就是utf8_unicode_ci及utf8_general_ci工作的结果。

  ?=A

  ?=O

  ü=U

  而utf8_unicode_ci准确性较好就表现在它有更完整的字元对照表上,它甚至可以将一个特别字符转换成多于一个英文字符,以德文中的s例:

  在utf8_unicode_ci下面等式是成立

  ?=ss

  在utf8_general_ci只有这样才成立

  ?=s排序规则

  因为utf8_unicode_ci有更完整字符表及转换规则,所以在排序的准确性上也比utf8_general_ci高一些。

MySQL的utf8-第1张图片

  utf8_general_ci字符表的一部份

  utf8_unicode_ci有更完整的字符表效能

  同样因为utf8_unicode_ci的字符表及转换规则更复杂,所以在效能上比utf8_general_ci慢。总结

  如果你的应用是德文、俄文等等,或者需要精确处理国际化的内容,请用utf8_unicode_ci。

  否则的话用utf8_general_ci就可以了。备注

  虽然说utf8_unicode_ci的字集比较完整,但其实还是不全的,所以MySQL还提供了很多种其他语言的专用字集,用于特别的本地应用,详细可以看看下面的官网连结

  參考

  MySQL官方解说:?http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html

  原文:http://www.cnopensource.org/2012/06/mysql-%E7%9A%84-utf8_general_ci-%E5%92%8C-utf8_unicode_ci-%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%8C%E5%BA%94%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%EF%BC%9F/

  原文地址:MySQL的utf8_general_ci和utf8_unicode_ci有什么区别,应如,感谢原作者分享。