萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> 解決mysql中文排序無效方法

解決mysql中文排序無效方法

中文排名在mysql中是一個比較糾結的問題,由於mysql默認的是uft8數據庫編碼,所以如果你在未操作的情況下來對中文進行排序是很不理想的,我們可以對數據庫或mysql查詢進行修改。

解決方法:

1.對於包含中文的字段加上"binary"屬性,使之作為二進制比較,例如將"name char(10)"改成"name char(10)binary"。

2.如果你使用源碼編譯MySQL,可以編譯MySQL時使用 --with--charset=gbk 參數,這樣MySQL就會直接支持中文查找和排序了(默認的是latin1)。也可以用 extra-charsets=gb2312,gbk 來加入多個字符集

解決方法二,不影響到其它mysql服務器直接在select查詢中轉換

1、不想改變表定義及默認編碼的情況,將字段先轉換成gbk編碼再排序:

 代碼如下 復制代碼

SELECT * FROM table ORDER BY CONVERT( chinese_field USING gbk ) ;

select name from test1 order by convert(name using gb2312) asc;

前提是在安裝mysql時安裝了gbk字符集,不然會報錯:

#1115 - Unknown character set: 'gbk'

  在編譯源碼時加上gbk編碼即可,如果已經安裝好了,重新編譯再安裝,重新編譯安裝一般不會影響mysql的已有設置,包括數據都不會受到影響。

2、直接將字段的字符集改成gbk,然後直接使用order by 排序即可。

mysql 5.x支持某列單獨定義字符集。

3、網上也有人說將字段定義加上binary屬性也能達到效果,未作測試,不敢評論。

mysql的文檔中也提到字符集校對規則:

 代碼如下 復制代碼

SELECT * FROM t1 ORDER BY a COLLATE utf8_bin;

結論是:查詢的時候,通過convert函數,把查詢出來的數據使用的字符集gb2312編碼就可以了,然後使用convert之後的中文排序。但是如果真的去把表中字段的字符集改成gb2312,又會涉及到很多編碼的問題,頁面傳值啊,從數據庫中存取啊,很麻煩。只要在查詢的時候,指定一下字符集,並不是真的把物理字段改成gb2312,很簡單。

copyright © 萬盛學電腦網 all rights reserved