zoukankan      html  css  js  c++  java
  • 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 NCHAR(5)
    2 SELECT @ncCoustomerID = NULL;
    3 SELECT * 
    4 FROM CUSTOMERS 
    5 WHERE CUSTOMERID LIKE ISNULL(@ncCoustomerID'%')
      
      3)代码三  
    1 Declare @cCoustomerID VARCHAR(5)
    2 SELECT @ncCoustomerID = NULL;
    3 SELECT * 
    4 FROM CUSTOMERS 
    5 WHERE CUSTOMERID LIKE ISNULL(@ncCoustomerID'%')
     
    4)代码四
    1 Declare @cCoustomerID NVARCHAR(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
  • 相关阅读:
    operator模块和functools模块
    函数注解
    用户定义的可调用类型、从定位参数到仅限关键字参数
    可调用对象
    nxos启动的初始化和https访问nx-api
    网络安全基础之网络协议与安全威胁
    华为AC中服务集命令解释配置
    转:图解ARP协议(四)代理ARP原理与实践(“善意的欺骗”)
    windows下python3 python2 共存下安装virtualenvwrapper
    关于网络安全学习的网站
  • 原文地址:https://www.cnblogs.com/TomToDo/p/1208534.html
Copyright © 2011-2022 走看看