MySql使用全记录3 -----以中文作为查询条件时结果为空的原因以及两个MySql小知识点(varchar、单双引号)
2012-11-14 21:21
861 查看
以中文作为查询条件时结果为空的原因以及两个MySql小知识点
一、以中文作为查询条件时结果为空集
今天同学跑来问我,说他用中文作为查询条件时,结果为空集,问是怎么回事。原因剖析:
我们知道,MySQL在进行查询时,查询命令与查询条件是大小写不敏感的,那么为了达到这种效果,MySQL本身必然会在执行SQL语句之前对语句进行大小写转换处理。这种处理对于单字节的ASCII字符自然没问题,但对于使用UTF-8或GB2312编码的多字节汉子,则可能是毁灭性的灾难。
解决方法:
对于数据表中所有可能包含中文的字段,我们都加上"binary"属性。这样的话,在比较的时候就会按照二进制数值进行,而非按照二进制数所要表示的含义进行比较,也就不会在比较前进行大小写转化了。
二、最近用到的两个关于MySql的小知识点
2.1 MySql里char与varchar的区别
参考自:http://www.jb51.net/article/23575.htmhttp://zhidao.baidu.com/question/204838851.html
char与varchar都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型。char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足(在检索操作中那些填补出来的空格字符将被去掉)。在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节),M只是其最大值。比如,存储字符串“abc",对于CHAR (10),表示你存储的字符将占10个字节(包括7个空字符),而同样的VARCHAR
(10)则只占用4(3+1)个字节的长度。
由于char 固定长度,所以在处理速度上要比varchar快速很多,但是相对浪费存储空间。所以对存储不大、但在速度上有要求的可以使用char类型,反之可以用varchar类型。
VARCHAR虽然比CHAR节省空间,但是如果一个VARCHAR列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR会更好一些。
2.2 MySql里单引号与双引号的用法
参考自:http://blog.csdn.net/jsjw18/article/details/4799467双引号里面的字段会经过编译器解释然后再当作HTML代码输出,但是单引号里面的不需要解释,直接输出。
比如下面这个例子:
$user='abc';
SQL1="select * from table where user=' ".$user." ' ";
SQL2="select * from table where user=' abc ' ";
对比一下上面的两个SQL语句,其功能是一致的,只是把'abc' 替换为 '".$user."',都是在一个单引号里面的。
相关文章推荐
- mysql中如何将查询结果的多个记录中的指定字段放到一个二维数组中,以及在in子句中使用数组
- 在使用mysql条件in查询的时候出现查的条数变少的原因以及解决方案
- MySQL 中文显示乱码以及中文查询条件返回0条结果的问题解决
- java中使用mysql查询 条件中含有中文时查询不到结果解决方案
- java中使用mysql查询 条件中含有中文时查询不到结果解决方案
- mysql 下 计算 两点 经纬度 之间的距离 含具体sql语句以及伪列作为查询条件实现
- mysql 以查询结果作为查询条件sql写法
- MySQL中不允许使用列别名作为查询条件
- mysql 使用count(),sum()等作为条件查询
- mysql在把子查询结果作为删除表中数据的条件,mysql不允许在子查询的同时删除原表数据
- Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm
- mysql: 两个字段合并,字符时间转时间戳,别名字段作为where条件查询
- MYSQL使用group by时,查询结果的总记录数
- 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)
- 在PLSQL中不能使用中文作为查询条件查询数据
- mysql使用查询结果作为临时表
- Mybatis使用MySQL进行模糊查询时输入中文检索不到结果
- linux下使用mysql,查询出来的结果中文显示不正常的解决方案
- mysql创建索引时出现duplicate "XX"的原因以及查询重复记录