注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

MySQL 关于char、varchar(区别)存储空格,Select 查询空格(查询)问题  

2016-05-24 17:01:48|  分类: Web技术-Mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一  空格存储问题
     我们都知道char与varchar的区别:
     1、char是固定长度的,如果长度不足,采用右补空格的方式来填充字符串至规定的长度,而varchar不是,有多长存多长。

     2、对于检索效率来说,char的效率要高于varchar的。

    如下表所示:

   MySQL 关于char、varchar(区别)存储空格,Select 查询空格(查询)问题 - fc_lamp - @fc_lamp

     注意:表最后一行,当在mysql 在sql mode为非严格模式下时,是截取字符存储。严格模式下,会报错无法写入。

     从上面可以看出CHARVARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。

但要是,我存放的字符最后一位有空格,如何处理的呢?


MySQL 关于char、varchar(区别)存储空格,Select 查询空格(查询)问题 - fc_lamp - @fc_lamp

从上表我们可以看出:char与varchar都能存放左置空格。

CHARVARCHAR类型声明的长度表示你想要保存的最大字符数。例如,CHAR(30)可以占用30个字符。

CHAR列的长度固定为创建表时声明的长度。长度可以为从0255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。

VARCHAR列中的值为可变长字符串。长度可以指定为065,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)

CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)

VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL


二  空格查询问题

  说完存放空格,我们说一下查询问题。
   首先(参http://dev.mysql.com/doc/refman/5.5/en/char.html):

All MySQL collations are of type PADSPACE. This means that all CHAR and VARCHAR values in MySQL are compared without regard to any trailing spaces [...] This is true for all MySQL versions, and is not affected by the server SQL mode.

也就是说char、varchar在比较时都会忽略尾部空格。

 因此,在查询时需要在SQL语句上做一些处理:

 1 使用like,不很精确。

 2 binary 关键字精确查询。

select * from test where varchar_ like '%name2 %'#2后面有空格
select * from test where varchar_ = binary 'name2 '#2后面有空格




更多:大小写问题

  评论这张
 
阅读(90)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017