由於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;
這樣,不管當前字段為什麼編碼,他都能很好的按中文拼音進行排序