由于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`)
- ) ; --Vevb.com
保存部份數據,代碼如下:
- 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;
這樣,不管當前字段為什么編碼,他都能很好的按中文拼音進行排序.
新聞熱點
疑難解答