自刨自吃,闲云野鹤,眼净心净,天宽地宽。
MySQL 中用 GKB 来让 UTF-8 字段中的中文按照拼音排序
UTF-8 中的中文不是按照拼音排序的,因此对于 使用 UTF-8 编码集的字段就无法按照拼音进行排序,最简单的解决方法就是转成 GBK 编码。
实例代码:
1 2 3 4 5 | SELECT * FROM `test` ORDER BY CONVERT( `test`.`name` USING GBK ) LIMIT 0 , 30 |
数据库表结构:
1 2 3 4 5 | CREATE TABLE IF NOT EXISTS `test` ( `id` INT(3) NOT NULL AUTO_INCREMENT, `name` VARCHAR(10) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ; |
测试环境:Windows 2003 Standard Edition,MySQL 5.1.22-rc-community。
对于偶正在使用的 Symfony 框架,因为使用了 propel 做 ORM,比较难直接操作SQL,除非使用 RAW SQL,而且使用 RAW SQL会导致很多高级特性无法使用,解决方式:$criteria->addAscendingOrderByColumn('CONVERT(' . TestPeer::NAME . ' USING GBK)');