W3CHINA Blog首页    管理页面    写新日志    退出


«October 2025»
1234
567891011
12131415161718
19202122232425
262728293031


公告
One blog (or more) a day, keep bad mood away, and make life wonderful!
-- by 小生

Blog正在逐步成长中,小生与您共享思维火花,畅想IT时代!

我的分类(专题)

日志更新

最新评论

留言板

链接

我的Blog:
CNBlog
Google Blog
MSN

友情Blog:
.Net的新生活
辉辉天地
彼岸


Blog信息
blog名称:小生杂谈
日志总数:166
评论数量:377
留言数量:1
访问次数:1015814
建立时间:2004年11月7日





[编程技术]浅谈Java、MySQL的中文排序问题
原创空间,  软件技术

Wonderow 发表于 2004/12/29 23:00:54

  首先要声明的是Java和MySQL中的中文排序是完全不同的两回事,之所以把他们放到一块,仅仅是巧合。  众所周知,Java中使用Unicode来表示字符(char是两个字节的),很好地解决了C/C++一直头疼的多国语言问题(这样甚至可以用中文当变量名来编程了:))。但因为Unicode里的中文是按部首+笔画排序的,如果习惯地想用:String s1="中国",s2="其它";System.out.println(s1.compareTo(s2));来比较中文或进行习以为常的按拼音排序,结果肯定是错误的(这里的结果是-841,即“中国”<“其它”,与拼音顺序不符)。幸好,Java里还提供了区域敏感(locale-sensitive)的字符串比较:java.text.Collator。因为区域不定,所以Collator类本身是抽象类,要这样使用:Collator myCollator=Collator.getInstance();System.out.println(myCollator.compare(s1, s2));  这样,虽然结果只是简单的1,但总算是正确的拼音顺序。把该方法用于Comparator.compare()方法中,即可实现正确的排序。  而MySQL中也经常会碰到这样的问题,order by某个字段时,如果以该字段的中文(GB2312编码)排序时,会比较混乱,不知以何种顺序进行排序。这是因为默认状态下,MySQL的排序不区别英文字母的大小写,而碰到GB2312编码的中文时按两个字节的ASCII码来处理,这样便使得排序出来的结果杂乱无章。解决方法也很简单(zz from 网上):  方法一、  一种解决方法是对于包含中文的字段加上"binary"属性,使之作为二进制比较,例如将"name char(10)"改成"name char(10)binary"。  方法二、  如果你使用源码编译MySQL,可以编译MySQL时使用--with--charset=gbk 参数,这样MySQL就会直接支持中文查找和排序了。--with--charset=gbk比--with--charset=gb2312好。默认的是latin1,编译时用extra-charsets=gb2312,gbk,其中,用来加入多个字符集。


阅读全文(5576) | 回复(1) | 编辑 | 精华
 


回复:浅谈Java、MySQL的中文排序问题
原创空间,  软件技术

第六世纪(游客)发表评论于2005/12/27 11:02:00

不错,


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.223 second(s), page refreshed 144798002 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号