0

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

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

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

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

4

3 回答 3

0

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

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

于 2012-08-02T19:23:04.370 回答
0

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

SELECT k FROM t1 ORDER BY k COLLATE utf8_hungarian_ci;

如果您不知道该选择什么,请使用utf8_general_ci排序规则 ( demo )。

于 2012-08-02T19:25:22.030 回答
0

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

http://dev.mysql.com/doc/refman/5.0/en/adding-collat​​ion.html

于 2012-08-04T08:27:58.240 回答