如何在MySql中按包含utf8编码数据的列正确排序?

时间:2012-08-02 19:19:43

标签: mysql encoding

我有一个名称编码为utf8的表。显示它们是没有问题的,因为我可以在php中调用utf8_decode但是当我按该列排序mysql时,名称的顺序是错误的。

例如: 我在“A”和“B”名称之间有一个以“Ö”开头的名字。

编辑1:列类型为VARCHAR,列和表的排序规则(现在)为ut8_general_ci,因为它们是多语言的。如果重要的话,之前他们是latin1_swedish_ci。

编辑2:我发现了另一个问题。当我填写表格时,我错误地将utf8_encode应用于数据,即使它已经是utf8。我已经纠正了,但问题仍然存在。但是当我在我的网站上输出时,我不必调用utf8_decode ...

3 个答案:

答案 0 :(得分:0)

您必须为存储UTF8内容的表中的列定义UTF8字符集和排序规则。然后,MySQL排序将根据您选择的排序规则正常运行。

http://dev.mysql.com/doc/refman/5.0/en/charset.html

答案 1 :(得分:0)

在mysql中,排序基于列的排序规则。通常使用自然语言进行utf8校对,如果您使用一种语言的数据,则应尝试使用该校对。如果您需要在查询级别更改已使用的排序规则,请按顺序使用COLLATE关键字,例如:

SELECT k FROM t1 ORDER BY k COLLATE utf8_hungarian_ci;

如果您不知道要选择什么,请使用utf8_general_ci归类(demo)。

答案 2 :(得分:0)

如果您对任何内置排序规则如何对数据进行排序感到不满意,那么您可以创建自己的排序规则:

http://dev.mysql.com/doc/refman/5.0/en/adding-collation.html