close

SQL:使用char,nchar查詢時需要注意 【轉】

轉貼原處:http://www.cnblogs.com/kingjiong/archive/2008/10/14/1310964.html
使用Sql ServerNorthwind資料庫的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

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 hsiung03 的頭像
    hsiung03

    hsiung.博格 ERP軟體

    hsiung03 發表在 痞客邦 留言(0) 人氣()