select * from T_User where password = ''与select * from T_User where password = ' '的结果是一样的,为什么?
password字段用的是varchar,空字符串(注意,是'',而不是NULL,请不要说IS NULL)与空格的字符串('  ')为什么是一样的,怎么判断?

解决方案 »

  1.   

    select LEN(''),LEN(' ')
    /*
                
    ----------- -----------
    0           0(1 行受影响)
    */
      

  2.   

    DECLARE @X VARCHAR(30)SET @X='11 22'SELECT LEN(@X),LEN(REPLACE(@X,' ',''))
      

  3.   

    select * from T_User where password is null
      

  4.   

    在SQL Server中给一个varchar字段赋空字符串时,其值就是NULL。
    所以要取得值为空字符串的记录,用is null
      

  5.   


    select * from T_User where password = ''
    select * from T_User where password = ' '
    这两句其实都是判断password字段值为空格,所以结果当然就一样的
      

  6.   


    select * from T_User where password = ''
    select * from T_User where password = ' '
    这两句其实都是判断password字段值为空格,所以结果当然就一样的
      

  7.   

    那请给个办法吧,这SQL语句怎么写呢?
    SELECT COUNT(*) FROM T_User WHERE UserID = 'admin' and Password 这后的条件怎么写呢?
      

  8.   

    --------------------------------------------------------------------------
    --  Author : htl258(Tony)
    --  Date   : 2010-04-11 18:18:10
    --  Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    --          Jul  9 2008 14:43:34 
    --          Copyright (c) 1988-2008 Microsoft Corporation
    --          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
    --------------------------------------------------------------------------
    --> 生成测试数据表:T_UserIF NOT OBJECT_ID('[T_User]') IS NULL
    DROP TABLE [T_User]
    GO
    CREATE TABLE [T_User]([username] NVARCHAR(10),[password] NVARCHAR(10))
    INSERT [T_User]
    SELECT 'admin',N' '
    GO
    --SELECT * FROM [T_User]-->SQL查询如下:
    select * from T_User where cast(password as varbinary(8000))=cast('' as varbinary(8000))
    /*
    username   password
    ---------- ----------(0 行受影响)
    */select * from T_User where cast(password as varbinary(8000))=cast(' ' as varbinary(8000))
    /*
    username   password
    ---------- ----------
    admin       (1 行受影响)
    */
      

  9.   

    鄙视-->错了。SELECT COUNT(*) FROM T_User WHERE UserID = 'admin' and cast(Password as varbinary(8000))=cast(' ' as varbinary(8000))这句可以过滤出admin用户密码是否设置空格。
      

  10.   

    是么,你确定?
    我测SELECT * from T_User where Password = '' 和 SELECT * from T_User where Password is NULL结果是不一样的
      

  11.   

    LZ的理解有问题,我已经说的很明白了! Password = '' 与 Password = '  ' 这两的结果是一样,可以用来判断空格字符串 Password is NULL 可用来判断空字符串,在SQL Server中给一个varchar字段赋空字符串时,其值就是NULL。
      

  12.   

    LZ的理解有问题,我已经说的很明白了! Password = '' 与 Password = '  ' 这两的结果是一样,可以用来判断空格字符串 Password is NULL 可用来判断空字符串,在SQL Server中给一个varchar字段赋空字符串时,其值就是NULL。