char和varchar的区别以及尾部空格问题 - sqlserver演示
Posted bcbobo21cn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了char和varchar的区别以及尾部空格问题 - sqlserver演示相关的知识,希望对你有一定的参考价值。
char是一个定长字段,假如申请了char(10)的空间,那么无论实际存储多少内容.该字段都占用10个字符;
varchar是变长的,申请的只是最大长度,占用的空间为实际字符长度+1,最后一个字符存储使用了多长的空间;
在检索效率上来讲,char > varchar;
因此在使用中,如果确定某个字段的值的长度,可以使用char,否则应该尽量使用varchar.例如存储用户MD5加密后的密码,则应该使用char。
在char和varchar尾部加空格,检索时char类型后的被删掉,而varchar类型的保存。
以上是说的mysql;这个char和varchar的问题,各数据库应该是一样的;下面来在SqlServer看一下;
有一个学生表;先增加一个sex字段,类型char(5);
可能不好演示;再改为char(10);
编辑数据,在第一行sname列紧接文字后面手动敲三个空格;第一行和第二行sex列,紧接文字后面手动敲三个空格;
查看一下表的数据;
写一段TSQL来看一下情况;
declare @name1 varchar(32),@name2 varchar(32)
declare @sex1 char(10),@sex2 char(10)
select @name1=sname from student where snum=1
select @name2=sname from student where snum=2
select @sex1=sex from student where snum=1
select @sex2=sex from student where snum=2
print @name1
print @name2
print @sex1
print @sex2
if @name1='张一'
print 'true'
else
print 'false'
if @name1='张一 '
print 'true'
else
print 'false'
if @sex2='女'
print 'true'
else
print 'false'
if @sex1='女 '
print 'true'
else
print 'false'
运行的情况如下;
if @name1='张一'
print 'true'
else
print 'false'
if @name1='张一 '
print 'true'
else
print 'false'
这两个if都输出'true',说明TSQL自己处理了尾部空格;
if @sex2='女'
print 'true'
else
print 'false'
if @sex1='女 '
print 'true'
else
print 'false'
这两个if语句,第一个输出'true',第二个输出'false';如前所述:尾部加空格,检索时char类型后的被删掉;
打印出的字段内容如下;第一行sname列尾部加了空格,检索出的内容带尾部空格;sex列都是固定长度为10;
以上是关于char和varchar的区别以及尾部空格问题 - sqlserver演示的主要内容,如果未能解决你的问题,请参考以下文章