猿问

UTF 8_General_ci与UTF 8_Unicode_ci有什么区别?

UTF 8_General_ci与UTF 8_Unicode_ci有什么区别?

介于utf8_general_ciutf8_unicode_ci,在性能方面有什么不同吗?



九州编程
浏览 2452回答 3
3回答

POPMUISE

这两个排序规则都用于UTF-8字符编码.不同之处在于如何对文本进行排序和比较。注意:既然MySQL 5.5.3,您应该使用utf8mb4而不是utf8..它们都是指Utf-8编码,但是旧的编码。utf8有一个特定于MySQL的限制,防止使用编号高于0xFFFD的字符。准确度utf8mb4_unicode_ci是基于Unicode标准进行排序和比较,它在非常广泛的语言中进行精确排序。utf8mb4_general_ci未能实现所有Unicode排序规则,这将导致在某些情况下(例如在使用特定语言或字符时)不受欢迎的排序。性能utf8mb4_general_ci比较和排序更快,因为它需要一系列与性能相关的快捷方式。在现代服务器上,这种性能提升几乎可以忽略不计。它是在服务器只占当今计算机CPU性能的很小一部分的时代设计的。utf8mb4_unicode_ci,它使用Unicode规则进行排序和比较,在使用范围广泛的特殊字符时,使用了相当复杂的算法来正确排序。这些规则需要考虑到特定于语言的惯例;并不是每个人都按照我们所说的“字母顺序”对字符进行排序。就拉丁语(即“欧洲”)语言而言,Unicode排序和简化排序没有多大区别。utf8mb4_general_ci在MySQL中进行排序,但是仍然有一些不同之处:例如,Unicode排序规则按照使用这些字符的人通常希望的那样,对“Œ”进行排序,如“ss”和“OE”。utf8mb4_general_ci将它们排序为单个字符(可能分别类似于“s”和“e”)。有些Unicode字符被定义为可忽略的字符,这意味着它们不应该计算到排序顺序,并且比较应该移到下一个字符。utf8mb4_unicode_ci处理好这些。在非拉丁语言,如亚洲语言或不同字母的语言中,可能有很多。更多Unicode排序与简化排序的区别utf8mb4_general_ci分拣。适合性utf8mb4_general_ci将在很大程度上取决于所使用的语言。对于某些语言来说,这是相当不够的。你应该用什么?几乎可以肯定的是,没有理由使用utf8mb4_general_ci现在,我们已经留下了CPU速度足够低的问题,因此性能差异将是非常重要的。您的数据库几乎肯定会受到其他瓶颈的限制。在非常特殊的情况下,性能上的差异是可以衡量的,如果是你,你可能已经知道了。如果您正在经历缓慢的排序,那么在几乎所有情况下,索引/查询计划都会出现问题。更改您的排序规则函数不应该在要排除故障的事情列表中占据很高的位置。过去,有些人建议使用utf8mb4_general_ci除非准确的排序将是足够重要,以证明性能成本。今天,性能成本几乎已经消失,开发人员正在更加认真地对待国际化。我还要补充的另一件事是,即使您知道您的应用程序只支持英语,它可能仍然需要处理人名,而人名通常包含在其他语言中使用的字符,在这些字符中,正确排序同样重要。一切都使用Unicode规则有助于为非常聪明的Unicode用户提供一种安心,即他们为使排序工作正常而付出了很大的努力。
随时随地看视频慕课网APP
我要回答