select * from T_User where password = ''与select * from T_User where password = ' '的结果是一样的,为什么?
password字段用的是varchar,空字符串(注意,是'',而不是NULL,请不要说IS NULL)与空格的字符串(' ')为什么是一样的,怎么判断?
password字段用的是varchar,空字符串(注意,是'',而不是NULL,请不要说IS NULL)与空格的字符串(' ')为什么是一样的,怎么判断?
/*
----------- -----------
0 0(1 行受影响)
*/
所以要取得值为空字符串的记录,用is null
select * from T_User where password = ''
select * from T_User where password = ' '
这两句其实都是判断password字段值为空格,所以结果当然就一样的
select * from T_User where password = ''
select * from T_User where password = ' '
这两句其实都是判断password字段值为空格,所以结果当然就一样的
SELECT COUNT(*) FROM T_User WHERE UserID = 'admin' and Password 这后的条件怎么写呢?
-- 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 行受影响)
*/
我测SELECT * from T_User where Password = '' 和 SELECT * from T_User where Password is NULL结果是不一样的