SQL:使用char,nchar查询时需要注意

使用Sql Server的Northwind数据库的Customers表
1)代码一  
1  Declare   @cCoustomerID   CHAR ( 5 )
2  SELECT   @ncCoustomerID   =   NULL ;
3  SELECT   *  
4  FROM  CUSTOMERS 
5  WHERE  CUSTOMERID  LIKE   ISNULL ( @ncCoustomerID ' % ' )
 
2)代码二   
1  Declare   @cCoustomerID  N CHAR ( 5 )
2  SELECT   @ncCoustomerID   =   NULL ;
3  SELECT   *  
4  FROM  CUSTOMERS 
5  WHERE  CUSTOMERID  LIKE   ISNULL ( @ncCoustomerID ' % ' )
  
  3)代码三  
1  Declare   @cCoustomerID  VAR CHAR ( 5 )
2  SELECT   @ncCoustomerID   =   NULL ;
3  SELECT   *  
4  FROM  CUSTOMERS 
5  WHERE  CUSTOMERID  LIKE   ISNULL ( @ncCoustomerID ' % ' )
 
4)代码四
1  Declare   @cCoustomerID  NVAR CHAR ( 5 )
2  SELECT   @ncCoustomerID   =   NULL ;
3  SELECT   *  
4  FROM  CUSTOMERS 
5  WHERE  CUSTOMERID  LIKE   ISNULL ( @ncCoustomerID ' % ' )

四份代码放入到Sql查询器内,结果1)和 2)返回消息为:
(0 行受影响)

3)和 4)返回消息为:
(91 行受影响)

原因:
1)和 2)如果变量为NULL,则会在%后面补空格,而3)和 4)不会。
该死,为什么它要自动补个空格呢。真让人烦, 火速赶往MSDN翻箱倒柜,原来:
char 数据类型是一种长度固定的数据类型。如果插入值的长度比 char NOT NULL 列的长度小,将在值的右边填补空格直到达到列的长度。(nchar也是这么干的)
varchar 数据类型是一种长度可变的数据类型。比列的长度小的值,不会在值的右边填补来达到列的长度。(nvarchar同理)
所以当声明变量为char或者nchar时,如果null了,它会自动帮你补齐空格知道满足定义的长度。
以后这个要小心了~嗯嗯

临了,不死心,又到 SQL Server 联机丛书里面找,发现也有,文章名为: 使用 char 和 varchar 数据,地址如下: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/udb9/html/07cc67f6-5057-463b-8975-694a5b484926.htm

转载于:https://www.cnblogs.com/TomToDo/archive/2008/05/27/1208534.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值