注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

php开发lamp

《西安--木木》-经历丰富了生活。 架构师QQ群: 246695517

 
 
 

日志

 
 

mysql中文拼音排序,实现方法  

2013-10-16 09:58:27|  分类: mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
由于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;
  评论这张
 
阅读(1768)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017