萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql中文拼音排序實現方法

mysql中文拼音排序實現方法

由於mysql對中文的支持不好,所以我們想要對中文進行按拼音排序也是一個不小不大的困難,今天我們利用convert函數來實現,不管什麼編碼都可以進行拼音進行排序哦,有需要的朋友參考一下。

對於包含中文的字段加上"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


實例

 代碼如下 復制代碼 create table `test111cnnet` (                                
          `bid` int(4) unsigned not null auto_increment,      
          `namerean` varchar(20) character set gbk default null,
          primary key (`id`)                                
        ) ;

保存部份數據

 代碼如下 復制代碼

insert into `test1` (`id`, `namerean`) values('李');
insert into `test1` (`id`, `namerean`) values('鄧');
insert into `test1` (`id`, `namerean`) values('站');

排序查詢

 代碼如下 復制代碼

mysql>select namerean fromtest111cnnetorder by namerean;

鄧(d)
李(l)
站(z)

這樣看上去mysql中文排序是沒有任問題,因為我們的namerean是gbk編碼,所以結果是滿意的,那麼如果是uft-8就不行了,所以我們構造了一條,

 代碼如下 復制代碼 select namerean from test111cnnet order by convert(namerean using gb2312) asc;

這樣,不管當前字段為什麼編碼,他都能很好的按中文拼音進行排序

更多詳細內容請查看:http://www.111cn.net/database/mysql/mysql.htm

copyright © 萬盛學電腦網 all rights reserved