MySQL,UTF-8,字符排序

MySQL,UTF-8,字符排序,mysql,Mysql,通过C-Api和Gtk GUI工具包在Linux Ubuntu中使用MySql服务器,我在使用克罗地亚字符“楓đ楓ĆŽĐ”时遇到了一些关于utf8排序和排序的一般性问题 MyISAM表是使用ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE utf8\u general\u ci创建的 服务器返回数据,但MySql不知道克罗地亚字母。他们“不知道”对它们进行适当排序,对于这些字符,他们“不知道”将小写(比如“č”)替换为大写“č”。对于所有其他字母,一切正常。

通过C-Api和Gtk GUI工具包在Linux Ubuntu中使用MySql服务器,我在使用克罗地亚字符“楓đ楓ĆŽĐ”时遇到了一些关于utf8排序和排序的一般性问题

MyISAM表是使用
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE utf8\u general\u ci
创建的

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


有什么建议吗?

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


如果您使用的是mysql-5.6或更高版本,请使用
utf8\u croatian\u ci
排序规则

Sretno

我终于找到了解决办法! 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
在这种情况下,您将按照克罗地亚规则进行排序,国家字母“楓đž”将被忽略,有向图也将被正确排序。 您不必在服务器上设置任何排序规则或字符集


这就是你所需要的

使用以下查询:


ORDER BY n COLLATE utf8\u croatian\u ci

对于波斯语,请使用此查询。。。我干得好

按n排序整理utf8\u波斯语\u ci


注意:
用您的文件名更改“n”。

我无法访问Mysql server 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
我在表中添加了另一列,并用我想要排序的数据填充了它。 然后我重新命名了mysql无法读取的所有单词,比如čevapčIćI。。。等 我制作了čevapčIćI cvzevapcici,现在我可以按照排序列对结果进行排序,并显示原始列

例如:

输入法 ČukaĆićarija AnstarŽena Balast

分类 Cvzuka Czzićarija Anstar Zzzena Balast

按排序从表中选择Ime

预期结果如下:

安斯塔 巴拉斯特 Čuka Ćićarija Žena



我在某个地方看到了这一点,但如果我使用utf8\u croatian\u ci,我所有的“插入”语句都会失败。我的系统可能没有这种编码吗?我正在使用“mysql版本14.14发行版5.1.58,用于使用readline 6.2的debian linux gnu(x86_64)”我非常确定5.1.58<5.6。。。所以,你没有克罗地亚的校勘资料。克罗地亚有一些混乱的排序规则(polocp1250_Croatian_ci是不正确的,
utf8_Croatian_ci
很晚了。感谢Amadan,那么我应该首先找到如何升级到ubuntu版本的5.6。我会在这里记录发生了什么,或者请求额外的帮助。在经历了很多麻烦之后,我终于安装了“mysql版本14.14发行版5.6.4-m7,用于Linux(x86_64),使用readline 5.1”。现在utf8_克罗地亚_ci已被识别和接受,但查询的数据未再次正确排序。我不讨论有向图,而是讨论基本顺序。知道有什么问题吗?即使您尝试从t ORDER BY n COLLATE utf8\u croatian\u ci中选择*,谢谢您的帮助。我将首先尝试最简单的解决方案:)