MySQL,UTF-8,字符排序

时间:2012-01-09 01:08:03

标签: mysql

通过C-Api和Gtk GUI工具包在Linux Ubuntu中使用MySql服务器我在使用克罗地亚字符“čćžšđČĆŽŠĐ”时有一些关于utf8排序和排序的一般问题。

我的MyISAM表格是使用ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE utf8_general_ci创建的。

服务器返回数据,但MySql不知道克罗地亚字母。他们“不知道”正确地对它们进行排序,并且在这个字符的情况下,他们“不知道”将小写(比如“č”)换成大写的“Č”。所有其他字母一切正常。 所以,现在我只能选择使用GTK对查询结果进行额外排序,以便正确处理所有这些情况。但(当然)这是我想要的“最后”解决方案。

有什么建议吗?

6 个答案:

答案 0 :(得分:3)

如果您使用的是mysql-5.6或更高版本,请使用utf8_croatian_ci归类。 Discussion here

Sretno

答案 1 :(得分:2)

使用以下查询:

ORDER BY n COLLATE utf8_croatian_ci

答案 2 :(得分:1)

据我所知,我不认为MySQL支持这种类型的操作,我相信这两个链接可能会有所帮助,你必须手工解决问题。

Upper/Lower case in unicode

MySQL Reference, Unicode

答案 3 :(得分:0)

对于波斯语使用此查询...对我来说很棒!

ORDER BY n COLLATE utf8_persian_ci


注意: 用您的归档名称更改'n'。

答案 4 :(得分:0)

我无法访问Mysql server 5.6,因此我执行了以下操作:

我在表格中添加了另一列,并用我想要排序的数据填充它。 然后我重命名了所有对mysql不可读的单词 - 比如čevapčići......等等。 我制作了čevapčićicvzevapcici,现在我可以通过我的排序列排序并显示原始列。

示例:

IME

ČukaĆićarijaAnstarŽenaBalast

排序

CvzukaCzzićarijaAnstarZzzena Balast

按排序从表格顺序中选择Ime;

预期结果:

Anstar Balast 的CuKα Ćićarija ZENA

答案 5 :(得分:-1)

我终于找到了解决方案! MySql服务器应该是5.6或更高。 如果有人坚持这一点,请执行以下操作:

//immediately after all connections, for example...
mysql_real_connect(conn, "localhost", mysql_user_name, mysql_password, database, 
0, NULL, 0);

//is needed to do this CRITICAL query:
//=====================================================================
  mysql_query(conn, "SET NAMES 'utf8' COLLATE 'utf8_croatian_ci'");
//=====================================================================

//and then query to get data, for example...
SELECT DTBL_ID, mjj, kolic, prodano, name, sb, prodajnac FROM invlista WHERE name
LIKE 'čoko%' ORDER BY name COLLATE utf8_croatian_ci ASC LIMIT 4048

在这种情况下,您将按照克罗地亚规则进行排序,国家字母“čćšđž”将被忽略大小写,有向图也将被正确排序。 您不必在服务器上设置任何排序规则或字符集。

这就是你所需要的!