• 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
  • 相关阅读:
    python基础5之装饰器
    python基础4之递归、lambda、深浅copy
    python基础3之文件操作、字符编码解码、函数介绍
    python基础1之python介绍、安装、变量和字符编码、数据类型、输入输出、数据运算、循环
    python基础2之字符串、列表、字典、集合
    Mysql主从复制的实现
    LNMP一键安装脚本
    LNMP搭建(CentOS 6.3+Nginx 1.2.0+PHP 5.3.15(fpm)+ MySQL 5.5.35)
    整合apache+tomcat+keepalived实现高可用tomcat集群
    浅谈CSRF
  • 原文地址:https://www.cnblogs.com/TomToDo/p/1208534.html
Copyright © 2020-2023  润新知