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演示的主要内容,如果未能解决你的问题,请参考以下文章

char与varchar的区别

char与varchar的区别

你不知道的mysql varchar

char和varchar在mysql中的效率怎样

sqlplus 中 varchar(10) 和 varchar ( 10 char) 的区别

char(10)和VARCHAR(10)主要的区别是什么?