最近几天一直忙着修改以前师兄写的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了,又是个小小的历史遗留-_-!
阅读(2116) | 评论(0) | 转发(0) |