[MySQL]: 什么是字符集校对规则?

5

当我使用phpMyAdmin查看我的在线表时,它使用的排序方法是“latin_swedish_ce”。为什么?默认是什么?另外,用于哪种排序方法?

5个回答

8
MySQL中的字符串有字符集和排序规则。Utf8是一种字符集,utf8_bin是其中一种排序规则。排序规则决定了MySQL如何比较字符串。
例如,这里有两种比较UTF8字符串的方法:
select case when 'test' = 'TEST' collate utf8_bin 
       then 'true' else 'false' end,
       case when 'test' = 'TEST' collate utf8_roman_ci 
       then 'true' else 'false' end

第一个使用的是utf8_bin排序规则,它区分大小写。第二个使用的是utf8_roman_ci排序规则,它不区分大小写。
可以使用以下命令列出所有字符集和排序规则:
show character set
show collation

latin1_swedish_ci 是默认的排序规则(MySQL 最初是在瑞典开发的),这也适用于 MariaDB。


8

比较字符串时要使用排序规则(collation),例如,瑞典语中字母 "Ä" 排在 "Z" 之后,但在德语中会像 "AE" 一样处理。因此,根据不同的排序规则,字符串的顺序也不同。

由于 MySQL 来自瑞典,所以默认排序规则是瑞典语。


4
为什么?默认是什么? latin1_swedish_ci 是默认值,因为MySQL AB公司来自瑞典。
通常情况下,这种排序规则被认为是适用于使用ISO-8859-1(西欧)字符集的任何不太挑剔的应用程序的合理默认值。它使大多数重音符在比较中变得不重要。
'A'='Ã'   -- 1

然而,需要指出的是,它有一些针对瑞典语的怪癖: öøåæ 被认为是不同的字母(而 ä 被认为与 æ 相同);y 被认为与 ü 是相同的字母。它还有一些特性,不仅仅是针对瑞典语,而是错误的:

'['='å'   -- 1, huh?
'd'='ð'   -- 1, tsk. eth is nothing to do with d

查看详细信息

如果您想要字母匹配而不考虑变音符号,则latin1_german_ci是更好的排序规则。latin1_general_ci是更好的排序规则,如果您不需要。如果您完全不关心大小写不敏感的匹配,并且希望每个字符都是唯一的,请选择latin1_general_cs

当然,现在希望您使用基于utf8_的排序规则,而不是任何基于latin1的排序规则。


3
一个字符集是符号和编码的集合。一个排序规则是用于比较字符集中字符的一组规则。
您可以在MySQL参考手册中找到更多信息。

1
@David:你比我更快地发布了参考手册的URL :) +1 - o.k.w

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接