mysql 中文排序問題各種方法介紹

來源:互聯網
上載者:User

方法1 
---- 
"mysql在查詢字串時是大小寫不敏感的,在編繹mysql時一般以ISO-8859字元集作為預設的字元集,因此在比較過程中
中文編碼字元大小寫轉換造成了這種現象,比較應急的方法是對於包含中文的欄位加上"binary"屬性,使之作二進位比較,
例如將"name char(10)"改成"name char(10)binary"." 
(已實驗成功) 

方法2 
----- 
編譯mysql時使用--with--charset=gbk 


utf8中文排序的

解決辦法如下:

  1、不想改變表定義及預設編碼的情況,將欄位先轉換成gbk編碼再排序:

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

  前提是在安裝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;

但此僅僅隻影響校對規則,並不影響字元的字元集本身


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

如果你使用源碼編譯MySQL,可以編譯MySQL時使用 --with--charset=gbk 參數,這樣MySQL就會直接支援中文尋找和排序了(預設的是latin1)。也可以用 extra-charsets=gb2312,gbk 來加入多個字元集。
如果不想對錶結構進行修改或者重新編譯MySQL,也可以在查詢語句的 order by 部分使用 CONVERT 函數。

比如

 

 代碼如下 複製代碼
select * from mytable order by CONVERT(chineseColumnName USING gbk);

UTF8 預設校對集是 utf8_general_ci , 它不是按照中文來的。你需要強制讓MySQL按中文來排序。

 代碼如下 複製代碼

select * from core_vender_info order by convert(vender_abbrev USING gbk) COLLATE gbk_chinese_ci

 
1、對於包含中文的欄位加上"binary"屬性,使之作為二進位比較。

CREATE TABLE testtable (
Id int(11) NOT NULL auto_increment,
Name varchar(60) binary default NULL,
PRIMARY KEY  (Id)
) TYPE=MyISAM;

2、在編譯MySql原始碼的時使用--with--charset=gbk參數,這樣MySQL就會直接支援中文尋找和排序了。--with--charset=gbk比--with--charset=gb2312好。預設的是latin1,編譯時間用extra-charsets=gb2312,gbk,其中,用來加入多個字元集。

解決辦法代碼

 代碼如下 複製代碼

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.