1. 程式人生 > >mysql order by 中文排序

mysql order by 中文排序

【中文排序】mysql order by 中文排序

1. 在MySQL中,我們經常會對一個欄位進行排序查詢,但進行中文排序和查詢的時候,對漢字的排序和查詢結果往往都是錯誤的。 這種情況在MySQL的很多版本中都存在。

如果這個問題不解決,那麼MySQL將無法實際處理中文。 出現這個問題的原因是因為MySQL在查詢字串時是大小寫不敏感的,在編繹MySQL時一般以ISO-8859字符集作為預設的字符集,因此在比較過程中中文編碼字元大小寫轉換造成了這種現象。

2.解決方法:
對於包含中文的欄位加上”binary”屬性,使之作為二進位制比較,例如將”name char(10)”改成”name char(10)binary”。
如果你使用原始碼編譯MySQL,可以編譯MySQL時使用 –with–charset=gbk 引數,這樣MySQL就會直接支援中文查詢和排序了(預設的是latin1)。也可以用 extra-charsets=gb2312,gbk 來加入多個字符集。

3. 如果不想對錶結構進行修改或者重新編譯MySQL,也可以在查詢語句的 order by 部分使用 CONVERT 函式。

比如 select * from mytable order by CONVERT(chineseColumnName USING gbk);
UTF8 預設校對集是 utf8_general_ci , 它不是按照中文來的。你需要強制讓MySQL按中文來排序。

 

例如:

SELECT * FROM employee_in ORDER BY CONVERT(NAME USING gbk)

mysql中字符集和排序規則說明

 

 資料庫需要適應各種語言和字元就需要支援不同的字符集(Character Set),每種字符集也有各自的排序規則(Collation)。

 

一.字符集

 

字符集,即用於定義字元在資料庫中的編碼的集合。 常見的字符集:utf-8 gbk 等。

 

二.排序規則

 

資料庫中的排序規則用來定義字元在進行排序和比較的時候的一種規則。 常見的如下:
(1) utf8_general_cs 和 utf8_general_ci (字尾"_cs"或者"_ci"意思是區分大小寫和不區分大小寫(Case Sensitive & Case Insensitve))
(2) utf8_bin 規定每個字串用二進位制編碼儲存,區分大小寫,可以直接儲存二進位制的內容

 

說明:所為排序規則,就是指字元比較時是否區分大小寫,以及是按照字元編碼進行比較還是直接用二進位制資料比較。