utf8整理与丹麦语的区别

时间:2013-05-14 08:40:39

标签: php mysql utf-8 character-encoding

那你好。 我正在将数据库的字符集从latin1_sweedish_ci更改为utf8。我总是使用utf8_danish_ci,因为它最接近挪威的字体风格 - 我认为 但是utf8_general_ciutf8_unicode_ci呢?

前一段时间;由于排序算法在后者中更为复杂,因此优选使用_general_ci以获得更好/更快的性能,并使用_unicode_ci以获得更高的准确性。但是,由于速度/性能不再是问题 - 或者在大多数情况下不再是问题 - _unicode_ci在大多数情况下都可以使用吗?

_unicode_ci_danish_ci的区别如何? 它是考虑到北欧字母表中的最后三个字母æøå吗?

我能找到的大多数比较(一对比)仅在_general_ci_unicode_ci之间。

任何人都知道何时使用_unicode_ci或何时使用_danish_ci的任何示例都将受到高度赞赏......

4 个答案:

答案 0 :(得分:5)

简而言之,如果您的应用程序是多语言的并且在同一个表中存储多种语言,那么您大部分都是搞砸了,并且应该担心在数据库之外进行排序/整理 - utf8_general_ci就像其他任何一样好。

如果它只支持单一语言,你可以通过在数据库级别设置正确的排序规则来做得很好 - 在你的情况下,确实是utf8_danish_ci,因为如果维基百科是任何东西,它与挪威语相同。

如果你想阅读有关整理的更多信息,那么ICU文档会提供很多关于这种东西是多么棘手的例子。引用广泛:

http://userguide.icu-project.org/collation

  

[H]是语言在排序字符串中的一些方式:

     

字母A-Z可以按与英语不同的顺序排序。   例如,在立陶宛语中,“y”在“i”和“k”之间排序。

     

可以将字母组合视为一个字母。对于   例如,在传统的西班牙语中“ch”被视为单个字母,   并在“c”和“d”之间排序。

     

重音字母可视为不重音的次要变体   信件。例如,“é”可以被视为等同于“e”。

     

重音字母可视为不同的字母。例如,“Å”   在丹麦语中被视为一个单独的字母,在“Z”之后排序。

     

在一种语言中被视为不同的非重音字母可以是   另一个模糊不清。例如,字母“v”和“w”是两个   根据英文不同的字母。但是,“v”和“w”是   在瑞典语中考虑了相同字母的变体形式。

     

可以将信件视为两个字母。例如,在   传统的德语“ä”被比作好像是“ae”。

     

泰语要求撤销某些字母的顺序。

     

法语要求在结尾处用重音符号排序的字母   字符串在字符串开头的重音符号之前排序。对于   例如,“côte”这个词在“coté”之前排序,因为它具有尖锐的重音   在最后的“e”上比“o”上的旋律更重要。

     

有时小写字母排在大写字母之前。相反   在其他情况下是必需的。例如,小写字母是   通常用英文大写字母排序。拉脱维亚字母   恰恰相反。

     

即使使用相同的语言,也可能需要不同的应用程序   不同的排序顺序。例如,在德语词典中,“öf”   会在“之前”出现。在电话簿中,情况确切如此   对面。

     

由于政府法规或规定,排序顺序可能会随时间而变化   Unicode中的新字符/脚本。

答案 1 :(得分:2)

请记住Collat​​ion!=编码。

编码是整数(数据库可以在一天结束时存储的所有内容)与人类可读的字符图形表示之间的映射。

排序规则是用于根据给定语言的传统字母顺序对字符进行排序的排序规则。请注意,此排序不反映内部数字表示的实际顺序。

您的问题简化为以下内容:您应在申请中使用哪种字母顺序?这无法回答。

答案 2 :(得分:-1)

我不是百分百肯定,但我相信utf8_danish_ci是({1}}(整理)的一部分。

话虽如此,如果您的数据库是utf8编码的,那么使用丹麦语整理是没有意义的。

快速测试(因为我赶时间,我找不到utf8的整理列表):

  • 使用排序utf8_unicode
  • 创建一个包含所有these chars(小写和大写)的表格
  • 选择所有由char ASC
  • 排序的记录
  • 将表格整理更改为utf8_danish_ci或最好utf8_general_ci
  • 如果两个查询中的字符具有相同的顺序,则选择其中一个,不会产生影响

相关link


更新

我的假设是错误的。

我做了some tests,显然utf8_unicode_ci没有排序,所以没关系。

答案 3 :(得分:-1)

归类确定可以在表格中存储哪些字符以及字符的顺序。选择以utf8开头的任何内容都应该涵盖大多数字符存储需求,因此utf8_general_ci是一个不错的选择。如果您要专注于一种语言,您可以选择本地排序规则,例如utf8_danish_ci,这意味着该顺序将是丹麦字符并且不区分大小写(ci部分)。

对于多语言应用程序,您可以使用utf8_general_ci存储字段,当您需要特定的排序或比较以匹配您的首选语言时,请使用{{3的首选排序规则将COLLATE字词添加到您的查询中}}

上面的@Denis提供的答案,声称你不能在MySQL中排序,我的经验是错误的。