mysql按照漢字拼音進行order by排序

weixin_33913332發表於2017-12-18

背景:

今天在專案開發的過程中,需要對查詢結果進行漢字的拼音升序進行排序顯示,當時第一反應就是直接在order by後面加上排序欄位就可以。

eg: select * from pub_user_info u where u.sex='1' order by u.name asc;

emm,一切按照所預期的進行著。but,執行之後...查詢的結果並沒有按照我所預期的按照漢字對應拼音的升序進行排列。

原因:

查詢資料後發現,出現這個問題的原因是因為MySQL在查詢字串時是大小寫不敏感的,在編繹MySQL時一般以ISO-8859字符集作為預設的字符集,因此在比較過程中中文編碼字元大小寫轉換造成了這種現象。

解決方法:

  • 1 修改資料庫表欄位:
    對於包含中文的欄位加上binary屬性,使之作為二進位制比較。
    eg: 將name char(10) 改成 name char(10)binary
  • 2 修改查詢語句:
    如果不想修改資料庫中表欄位屬性的話,也可以在查詢語句的order by部分使用 CONVERT函式。
    eg: select * from pub_user_info u where u.sex='1' order by CONVERT(u.name USING GBK) asc;

ps:資料庫表結構一般在確定後就儘量不要去做改動,所以推薦使用第二種方法

相關文章