mysql中文排序乱序问题

2308阅读 0评论2009-05-12 mhz-ada
分类:Mysql/postgreSQL

最近几天一直忙着修改以前师兄写的epg代码,里面有些历史遗留问题,刚好杭州公司那边,催着要解决这些遗留问题,头疼啊,还准备写开题报告,以及帮某某人翻译英文摘要,没办法,工作的事情比较紧急,只有先解决了。

言归正传,里面的遗留问题,最主要的就是二级中文子目录的排序问题,由于之前从mysql数据库里面导出数据的时候,用select * from xxx order by chinese_name。所以呢,就出现排序乱序的问题了。

先解释两个名词,
字符集
:是一套符号和编码。
校对规则
:是在字符集内用于比较字符的一套规则。
mysql里面呢,任何一个给定的字符集至少有一个校对规则,它可能有几个校对规则,并且每个校对规则只能属于一个字符集,所以呢,如果字符集和校对规则不对应的话,排序出来是乱七八糟的。这也就是mysql中文排序乱序的问题。
http://dev.mysql.com/doc/refman/5.1/zh/charset.html#charset-general

试验了几个网上的方法和mysql手册里面的,还是COLLATE xxx_bin比较好用(xxx对应你默认的表字符集)--使用COLLATE子句,能够为一个比较覆盖任何默认校对规则,具体例子:
select * from tree order by chinese_name COLLATE xxx_bin
具体见:
http://dev.mysql.com/doc/refman/5.1/zh/charset.html#charset-collate

note一下:convert(str unsigned)就是把str表项转化为int了,又是个小小的历史遗留-_-!
上一篇:虚函数与纯虚函数区别
下一篇:博客已升级,请注意变更地址