我面臨一些奇怪的排序問題,我真的不明白。我有兩列或三列含有波蘭語重音字母的表,如「英鎊」。由於此字母的出現,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默認排序結果,而不在將來運行的每個查詢中定義結果。這是可能的嗎?