mysql 进阶 (八) 排序问题方案探究
一、前言
在mysql
默认order by
只对数字与日期类型可以排序,但对于varchar
字符型类型排序好像没有用了,下面我来给各位同学介绍 varchar 类型排序问题如何解决。
今天在对国家电话号码表进行排序的时候发现了一个有趣的问题,我想让 isdcode 字段按照由小到大的顺序排序,于是乎我是这样写的
结果如下,发现竟然不是我想要的结果,asc
排序是对的呀,于是乎我找呀找,找呀找,终于找到原因了;
isdcode 是 varcher 类型的,如果排序直接用asc
显然是不行的,必须将他转换成int
类型然后就可以正常排序了,只要isdcode + 0
就可以了
于是乎这样写
好像是想要的那种数据比较大小的了呀。。可是为什么+0 就好了呢?原来,+0 后就转换INT
类型排序了。这样就可以按照大小排序了。
二、中文排序
如果不是电话而是汉字怎么办,汉字排序我们只要进行简单转换即可排序了。
在mysql
中使用order by
对存储了中文信息的字段,默认出来的结果并不是按汉字拼音的顺序来排序,要想按汉字的拼音来排序,需要把数据库的字符集设置为UTF8
,然后在order by
时候强制把该字段信息转换成GBK
,这样出来的结果就是按拼音顺序排序的。例如:
在 mysql 中试了一下,结果很令人满意。
结论是:查询的时候,通过convert
函数,把查询出来的数据使用的字符集gb2312
编码就可以了,然后使用convert
之后的中文排序。但是如果真的去把表中字段的字符集改成gb2312
,又会涉及到很多编码的问题,页面传值啊,从数据库中存取啊,很麻烦。只要在查询的时候,指定一下字符集,并不是真的把物理字段改成gb2312
,相对比较简单。
三、延伸阅读 MySQL 外键在数据库中的作用
MySQL
外键的目的是控制存储在外键表中的数据,使两张表形成关联,是MySQL
数据库中非常重要的组成部分,值得我们去深入了解。那么,MySQL
外键究竟起到哪些作用呢?下文就将带你一探其中的秘密。
3.1 MySQL 外键的作用
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。使两张表形成关联,外键只能引用外表中列的值!
3.2 建立外键的前提
本表的列必须与外键类型相同(外键必须是外表主键)。
指定主键关键字: foreign key(列名)
引用外键关键字: references <外键表名>(外键列名)
3.3 事件触发限制
on delete
和on update
, 可设参数cascade
(跟随外键改动), restrict
(限制外表中的外键改动),set Null
(设空值),set Default
(设默认值),[默认]no action
。
outTable 表 主键 id 类型 int
创建含有外键的表:
说明:把 id 列设为 MySQL 外键,参照外表 outTable 的 id 列。当外键的值删除,本表中对应的列删除;当外键的值改变 本表中对应的列值改变。
MySQL
中一张表只能有一个主键,主键可以由多个字段组成。
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/452c788f2bdb99f4f54b41a69】。文章转载请联系作者。
评论