您的位置:首页 > 数据库 > MySQL

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.htm

                 http://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 查询 varchar
相关文章推荐