Chinaunix首页 | 论坛 | 博客
  • 博客访问: 61869
  • 博文数量: 18
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 210
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-26 16:04
文章分类

全部博文(18)

文章存档

2011年(1)

2009年(3)

2008年(14)

我的朋友

分类: Mysql/postgreSQL

2009-05-12 15:51:47

最近几天一直忙着修改以前师兄写的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) |
给主人留下些什么吧!~~