我面临一些奇怪的排序问题,我真的不明白。我有两列或三列含有波兰语重音字母的表,如“英镑”。由于此字母的出现,utf8_unicode_520_ci整理最适合我的目的。我在我的PHP页面中遇到了这个问题。 Webserver运行Apache 2.4,PHP 7.1.0,MySQL 5.7。MYSQL:错误的排序规则是挑选的查询
连接到数据库后,我设置的字符集和校对规则是这样的:
$connection->set_charset("utf8");
$connection->query("SET NAMES utf8 COLLATE utf8_unicode_520_ci;");
后来我仔细检查使用SHOW VARIABLES LIKE '%collat%';
和SHOW VARIABLES LIKE '%char%';
实际的字符集和校对其在以下信息格式化的形式回报:
collation_connection->utf8_unicode_520_ci
collation_database->utf8_unicode_520_ci
collation_server->binary
character_set_client->utf8
character_set_connection->utf8
character_set_database->utf8
character_set_filesystem->binary
character_set_results->utf8
character_set_server->binary
character_set_system->utf8
character_sets_dir->/usr/share/mysql/charsets/
直到这一点,一切似乎都是正确的。但我面对的订货问题,当我运行下面的查询:
SELECT birthPlace FROM persons ORDER BY birthPlace DESC LIMIT 5;
这retrun以下结果:
Łapsze Wyżne
Łapsze Wyżne
Zvolenská Slatina
Župčany
Župčany
输入“ŁapszeWyżne”不应被列为最后按utf8_unicode_520_ci整理它应该与从正常的“L”字符开始的条目一起列出。所以很显然,它选择了其他排序规则,然后是utf8_unicode_520_ci.I认为是utf8_general_ci排序规则使用了什么(从结果顺序猜测)。表和列“birthPlace”的整理是utf8_unicode_520_ci。我预计整理优先级将分别是默认的列,表,数据库。
phpMyAdmin和MySQL Workbench按预期排序条目。但我的脚本没有按预期排序。
所以我的问题是真的是用什么整理如果没有明确的查询设置以及如何解决它,如果没有可能修改查询。
编辑:问题本身不是关于如何选择适当的归类,因为我已经知道并定义排序是正确的我对我能控制所有地方的目的。如果在SELECT查询中未定义爆炸式定义,则使用排序规则。它是连接,列,表,数据库还是服务器的整理?或者它是使用字符集的默认排序规则(在我的情况下,对于uth8字符集,它是utf8_general_ci?从文档中我不清楚)我希望通过utf8_unicode_520_ci默认排序结果,而不在将来运行的每个查询中定义结果。这是可能的吗?