2013-07-22

【MySQL】查詢結果按正體中文排序

參考資料 ----

MySQL Chinese, Japanese, and Korean Character Sets



MySQL 的欄位預設為 utf8_general_ci,若要查詢的結果按正體中文排序,需做一些額外的處理。

正體中文 BIG5 有參照到筆劃,如果單純使用 CONVERT() 函式,如:

SELECT * FROM 資料表 ORDER BY CONVERT(欄位名 USING BIG5)

則可解決筆劃上的排序,但當筆劃數相同時,相同的字並不會排在一起,例如:

 

人中畫, 九尾狐,  十尾龜, 九尾龜, 九命奇冤, 二刻拍案驚奇, 人虎傳, ...


可以看出這幾本書名的第一個字都是 2 劃,所以在邏輯上 MySQL 的排序不能說錯


BIG5 是雙字元,也就是由 2 個 ASCII 字組成 1 個中文字,而 MySQL 支援以 ASCII 排序,這就要用到 BINARY 指令

語法組合起來如下:

SELECT * FROM 資料表 ORDER BY CONVERT(SUBSTR(欄位名,1,1) USING BIG5), BINARY SUBSTR(欄位名,1,1)

 

第 1 個字先按筆劃排,再按 ASCII 排,排序的結果如下:

 

九命奇冤, 九尾狐, 九尾龜, 二刻拍案驚奇, 人中畫, 人虎傳, 十尾龜, ...

 

由上面的語法衍伸下去,第 2 個字, 第 3 個字...就看您要不要排的那麼精準了。

 

另一個變通的方法,可參考下方的 SQLite 做法

 

 

相關筆記 ----

【MySQL】簡體中文的 編碼與排序關係

【Kotlin】SQLite 以 BIG5 排序


沒有留言:

張貼留言