• 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
  • 相关阅读:
    linux定时器【转】
    Linux Timer定时器【转】
    Linux使用一个定时器实现设置任意数量定时器功能【转】
    Ubuntu 12.04将默认集成Landscape管理套件【转】
    【Linux系统编程应用】Linux音频编程基础(一)【转】
    CRT/LCD/VGA Information and Timing【转】
    记录自己对EventLoop和性能问题处理的一点心得【转】
    Linux下select&poll&epoll的实现原理(一)【转】
    MQTT--入门【转】
    RESTful 个人理解总结【转】
  • 原文地址:https://www.cnblogs.com/TomToDo/p/1208534.html
Copyright © 2020-2023  润新知