MySQL 排序规则:latin1_swedish_ci 与 utf8_general_ci
Posted
技术标签:
【中文标题】MySQL 排序规则:latin1_swedish_ci 与 utf8_general_ci【英文标题】:MySQL Collation: latin1_swedish_ci Vs utf8_general_ci 【发布时间】:2011-06-13 18:15:45 【问题描述】:在 mysql 中创建表时我应该为 Collation 设置什么:
latin1_swedish_ci
或 utf8_general_ci
到底什么是排序规则?
我一直在用latin1_swedish_ci
,会不会有什么问题?
【问题讨论】:
重新排序规则是:***.com/questions/3324900 Differences between utf8 and latin1的可能重复 I don't understand Collation? (Mysql, RDBMS, Character sets)的可能重复 @Pekka:问题是关于排序规则而不是编码,所以它不是第二个链接中问题的重复。 ;) 【参考方案1】:无论你做什么,都不要尝试在 mysql 中使用带有 utf8(而不是 latin)的默认 swedish_ci 排序规则,否则会出错。排序规则必须与正确的字符集配对才能工作。由于 charset 和 collation 不匹配,此 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
@Blaisorblade 指出解决此问题的方法是使用与瑞典语排序规则相关的字符集:
DEFAULT CHARACTER SET = utf8_swedish_ci
Yii php 框架的 cal(日历)模块的 SQL 与上述错误代码类似。希望他们现在已经修好了。
【讨论】:
上述代码中的错误是因为您将 UTF8 字符集与 latin1_* 排序规则结合在一起。它应该改用utf8_swedish_ci
(dev.mysql.com/doc/refman/5.1/en/charset-unicode-sets.html)。因此,您的回答应该只是说排序规则是特定于字符集的,并且一个字符集的排序规则不能与另一个字符集组合。
是的,这是一种更简洁的说法,我只是想回答 OP 的问题并防止他们犯代码中说明的错误。我还应该提供有效的代码。将添加您的。【参考方案2】:
您可以在此处阅读有关 MySQL 5.5 的字符集和排序规则:Character Sets and Collations in GeneralCharacter Sets and Collations in MySQL
排序规则支持对于支持世界上所有许多书面语言是必要的。例如,在我的语言(丹麦语)中,我们有一个特殊字符“æ”。这听起来像瑞典语、德语、匈牙利语(以及更多) 'ä' 。该字符也出现在丹麦语中,并带有从其中一种语言中导入的单词。由于排序规则的支持,我们可以正确打印并且相同的排序(ORDER BY ...)是相同的。如果没有排序规则支持,这是不可能的。
瑞典语排序规则是 MySQL 默认的拉丁字符集。它适用于英语。英语是如此简单 - 它适用于所有内容,因为它没有特殊字符、重音等。但如果您有另一种经常使用的语言(例如西班牙语),您可以将排序规则更改为西班牙语,因此对西班牙语字符串进行排序会根据西班牙语规则正确。
一个非常特殊的排序规则示例是德语排序规则之一。它的创建是为了允许像在德国电话簿中一样进行排序。德国电话簿不遵循德语的一般规则!
您可以根据需要创建自己的排序规则。排序规则可以编译或文本格式。
【讨论】:
【参考方案3】:在 Wamp Server 2.5 中,您可以通过进入 PHPAdmin,选择您需要更改的数据库来更改排序规则。这将为您提供另一组选项卡。选择名为“操作”的选项卡。在该选项卡中将有一个名为 collation 的部分,在下拉列表中选择您想要的部分,然后选择 go。
【讨论】:
【参考方案4】:试试这些:
<?php
echo htmlspecialchars($string);
echo htmlentities($string);
?>
您可以从http://php.net/manual/en/function.htmlspecialchars.php 看到更多信息。 :D
为我工作!没有更多的钻石:)
【讨论】:
这与 MySQL 无关。以上是关于MySQL 排序规则:latin1_swedish_ci 与 utf8_general_ci的主要内容,如果未能解决你的问题,请参考以下文章