【发布时间】:2013-12-16 10:33:33
【问题描述】:
我对订购方式有疑问。例如,我有三个波兰语单词:“Zzzz”、“Żubr”和“Zajawka”。
它们应该是这样的:
Zajawka
Zzzz
Żubr
因为 Ż 字母在波兰字母中的 Z 之后。但这对我来说是:
Zajawka
Żubr
Zzzz
因此它将字母 Ż 视为 Z 字母...
【问题讨论】:
标签: mysql sql sorting sql-order-by
我对订购方式有疑问。例如,我有三个波兰语单词:“Zzzz”、“Żubr”和“Zajawka”。
它们应该是这样的:
Zajawka
Zzzz
Żubr
因为 Ż 字母在波兰字母中的 Z 之后。但这对我来说是:
Zajawka
Żubr
Zzzz
因此它将字母 Ż 视为 Z 字母...
【问题讨论】:
标签: mysql sql sorting sql-order-by
我假设数据库不是使用波兰排序规则创建的。但是你总是可以在排序时指定它:
SELECT name
FROM mytable
ORDER BY name COLLATE SQL_Polish_Cp1250_CS_AS_KI_WI
编辑:
我误读了标签,并认为这是 SQL Server。如果您有不同的 RDBMS,请在 cmets 中回答 @RaphaëlAlthaus 的问题。
【讨论】:
utf8_polish_ci 字符集,但我在“是否对波兰字符进行排序”上找到了不同的答案...
从数据库中获取记录后,您将不得不重新排序,因为它将 Ż 视为英文字符 z。
您需要编写自定义重新排序方法,您只需在 z 之后排序 Ż。
或
您可以获取除 Ż 之外的所有记录。
然后在另一个查询中获取仅 Ż 的所有记录并将此列表附加到预取列表的末尾。
选择名称中没有 Ż 字符的所有记录 Select * from clients Where client.name != Ż AND (my filter)
Select * from clients Where client.name == Ż AND(我的过滤器)
代码隐藏(c#):
SqlDataReader dr = cmd.ExecuteReader();
List<Product> myList = new List<Product>();
while (dr.Read())
{
myList.Add(GetFromReader(dr));
}
if (dr.NextResult())
{
while (dr.Read())
{
myList.AddRange(GetFromReader(dr));
}
}
【讨论】: