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

时间:2011-01-22 17:53:36

标签: mysql database-design collation

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

  • latin1_swedish_ciutf8_general_ci

什么是整理?

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

4 个答案:

答案 0 :(得分: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

并且@Blaisorblade指出解决这个问题的方法是使用与瑞典校对一起使用的字符集:

DEFAULT CHARACTER SET = utf8_swedish_ci

Yii php框架的cal(日历)模块的SQL类似于上面的错误代码。希望他们现在已经修好了。

答案 1 :(得分:3)

您可以在此处阅读有关MySQL 5.5的字符集和排序规则:
Character Sets and Collations in General
Character Sets and Collations in MySQL

支持校对支持是支持世界上所有语言的必要条件。例如,在我的语言(丹麦语)中,我们有一个特殊的角色'æ'。听起来像瑞典语,德语,匈牙利语(以及更多)'ä'。这个角色也出现在丹麦语中,其中一种语言是从这些语言中导入的。由于排序规则的支持,我们可以正确打印和排序相同(ORDER BY ...)相同。没有归类支持是不可能的。

瑞典语排序规则是拉丁字符集的MySQL默认设置。它适用于英语。英语很简单 - 它适用于所有内容,因为它没有特殊的字符,重音等。但是如果你有另一种经常使用的语言(例如西班牙语),你可以将校对改为西班牙语,所以西班牙语字符串的排序会根据西班牙语规则是正确的。

整理的一个非常特殊的例子是德国的一个。它被创建为允许像德国电话簿中那样进行排序。德国电话簿不遵循德语的一般规则!

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

答案 2 :(得分:-1)

在Wamp Server 2.5中,您可以通过进入PHPAdmin,选择需要更改的数据库来更改排序规则。这将为您提供另一组选项卡。选择名为Operations的选项卡。在该选项卡中将显示名为collat​​ion的部分,在下拉列表中选择所需的部分,然后选择go。

答案 3 :(得分:-3)

试试这些:

<?php
echo htmlspecialchars($string);
echo htmlentities($string);
?>

您可以从http://php.net/manual/en/function.htmlspecialchars.php查看更多信息。 :d

为我工作!不再有钻石了:))