MySQL排序规则:latin1_swedish_ci与utf8_general_ci相对应

lau*_*kok 15 mysql database-design collation

在MySQL中创建表时,我应该为Collat​​ion设置什么:

  • latin1_swedish_ci 要么 utf8_general_ci

无论如何,整理是什么?

我一直在使用latin1_swedish_ci,会不会引起任何问题?

hob*_*obs 6

无论你做什么,不要尝试在mysql中使用utf8(而不是拉丁语)的默认swedish_ci排序规则,否则你会收到错误.排序必须与正确的字符集配对才能工作.由于charset和collat​​ion不匹配,此SQL将失败:

CREATE  TABLE IF NOT EXISTS `db`.`events_user_preference` (
  `user_id` INT(10) UNSIGNED NOT NULL ,
  `email` VARCHAR(40) NULL DEFAULT NULL ,
  PRIMARY KEY (`user_id`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = latin1_swedish_ci
Run Code Online (Sandbox Code Playgroud)

并且@Blaisorblade指出解决这个问题的方法是使用与瑞典排序规则相关的字符集:

DEFAULT CHARACTER SET = utf8_swedish_ci
Run Code Online (Sandbox Code Playgroud)

用于Yii php框架的cal(日历)模块的SQL具有类似于上述错误代码的内容.希望他们现在已经修好了.

  • 上面代码中的错误是因为您将UTF8字符集与latin1_*排序规则组合在一起.它应该使用`utf8_swedish_ci`(http://dev.mysql.com/doc/refman/5.1/en/charset-unicode-sets.html).因此,您的答案应该只是说排序规则是特定于字符集的,并且一个字符集的排序规则不能与另一个字符集结合使用. (2认同)

小智 5

您可以在此处阅读有关 MySQL 5.5 的字符集和排序规则的信息:
\n一般字符集和排序规则
\n MySQL 中的字符集和排序规则

\n\n

排序规则支持对于支持世界上所有的书面语言是必要的。例如,在我的语言(丹麦语)中,我们有一个特殊字符“\xc3\xa6\”。听起来像瑞典语、德语、匈牙利语(等等) \'\xc3\xa4\' 。该字符也出现在丹麦语中,其中的单词是从其中一种语言导入的。由于排序规则的支持,我们可以正确打印并进行相同的排序(ORDER BY ...)。如果没有排序规则支持,这是不可能的。

\n\n

瑞典语排序规则是 MySQL 拉丁字符集的默认排序规则。它与英语配合得很好。英语非常简单 - 它适用于所有语言,因为它没有特殊字符、重音等。但是如果您经常使用另一种语言(例如西班牙语),您可以将排序规则更改为西班牙语,因此对西班牙语字符串进行排序根据西班牙语规则正确。

\n\n

一个非常特殊的排序规则示例是德语排序规则之一。它的创建是为了像德国电话簿一样进行排序。德语电话簿不遵循德语的一般规则!

\n\n

如果您愿意,您可以创建自己的排序规则。排序规则可以是编译的或文本格式的。

\n