您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

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;

 


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进