表結構:
CREATE TABLE `texts` ( `letter` VARCHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `text` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, INDEX (`letter` ASC), INDEX (`text` ASC) ) ENGINE InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
樣本數據:
INSERT INTO `texts` (`letter`, `text`) VALUES ('a', 'Apple'), ('ā', 'Ābols'), ('b', 'Bull'), ('c', 'Cell'), ('č', 'Čakste');
其中我執行查詢:
個SELECT DISTINCT `letter` FROM `texts`;
預期結果:
`letter` a ā b c č
實際結果:
`letter` a b c
我試過很多UTF8歸類(utf8_ [彬| general_ci | unicode_ci], utf8mb4_ [彬| general_ci | unicode_ci]等) ,他們都沒有工作。如何 解決這個問題?
編輯澄清:我想要的不僅僅是獲得所有的字母 ,但也得到他們在預期 結果指定的順序。
utf8_bin
獲取所有字母,但它們以 錯誤的方式排序 - 擴展拉丁字符僅在所有基本 拉丁字符(例如:a,b,c,ā,č)後面跟隨。此外,我使用的實際表格 每封信都有很多文字,所以分組是必須的。
編輯#2:這裏是從活動站點全表數據 - http://pastebin.com/cH2DUzf3 執行該SQL並運行後,下面的查詢:
SELECT DISTINCT BINARY `letter` FROM `texts` ORDER BY `letter` ASC
產量幾乎完美的效果,但有一個例外:在'u'之前的字母'ū'是,這很奇怪,至少可以這樣說,因爲所有其他擴展拉丁字母都顯示在它們的基本拉丁版本之後。我如何解決這個最後一個問題?
你嘗試'utf8_bin'? –
@juergend - 添加了一個編輯來澄清一件事。 – jurchiks
想知道結果是什麼: SELECT'letter' FROM'texts'; – ak0053792