轉貼原處:http://www.cnblogs.com/kingjiong/archive/2008/10/14/1310964.html
使用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/07cc 67f 6-5057-463b-8975 -694a 5b484926.htm