參考資料 ----
MySQL Chinese, Japanese, and Korean Character SetsMySQL 的欄位預設為 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 做法
相關筆記 ----
【Kotlin】SQLite 以 BIG5 排序
沒有留言:
張貼留言