2009-07-19 14 views
0

sp_help文件並沒有說太多關於表的屬性TrimTrailingBlanks:TrimTrailingBlanks在SQL Server

TrimTrailingBlanks | varchar(35) | Trim the trailing blanks. Returns Yes or No. 

所以我想,如果是很好的做法,打開它,或者我應該讓它的默認關閉。我想要做的是從左側和右側字符串中刪除空白,並且(通過名稱)是此屬性啓用的內容。

現在,你知道是否是好的做法來打開這個屬性?

我知道我可以在我的應用程序代碼中執行跟蹤,但在任何插入或更新之前自動在數據庫中完成此操作將非常好。我不知道如果我通過是更改值No,是否會有任何缺點。

回答

2

這與如何處理尾隨空白有關。它與沒有任何關係,導致空白。它與固定長度的字符串是否被填充空格到他們定義的長度有關。

有關詳細信息,請參閱SET ANSI_PADDING,其中有一個很好的效果表。 sp_help過程報告定義時這些列的設置。

爲了安全起見,在存儲數據之前,您應該始終清理數據,無論是用於填充還是修剪,設置爲特定的案例還是其他任何內容。你永遠不知道數據庫升級會改變什麼。

1

我會修剪代碼中的空格。

在改變 這個設置之前,你應該三思。 TrimTrailingBlanks =否, 是設置爲 ANSI_PADDING爲ON的效果。對於大多數 客戶端(DB庫是 例外),默認情況下,ANSI_PADDING爲 。此外,當您使用索引 視圖和索引計算機列時,ANSI_PADDING 必須處於打開狀態。 可能還有其他情況,其中 ANSI_PADDING在將來需要 版本的SQL Server。

也就是說,ALTER TABLE是可以 使用什麼:

SET ANSI_PADDING OFF 
go 
CREATE TABLE trimtrailer(a varchar(12) NOT NULL) 
go 
INSERT trimtrailer(a) VALUES ('Trimmer ') 
go 
SET ANSI_PADDING ON 
go 
ALTER TABLE trimtrailer ALTER COLUMN a varchar(12) NOT NULL 
go 
INSERT trimtrailer(a) VALUES ('Trimmer ') 
go 
SELECT '<' + a + '>' FROM trimtrailer 
go 
DROP TABLE trimtrailer 

Erland Sommarskog

0

SET ANSI_PADDING設置將被棄用(始終是 「ON」 的SQL Server的更高版本)。我在前幾天看到這種情況發生在下一個版本(R2之後)

我們在代碼中設置了它(一個簡單的RTRIM,因爲我們有多個客戶端,所以我們在SQL中這樣做)。

0

始終尊重這樣的設置CHAR字段類型。

如果TrimTrailingBlanks開啓設置,例如保存在char(3)字段中的值'a'將變爲'a',這聽起來很正常,是不是?然而沒有TrimTrailingBlanks開啓,保存值'a'將被保存爲'a',現在你看到了區別。

對於sql數據庫字段的比較,它不會造成不好的影響,因爲'6'='6'如果用於字符串匹配匹配,仍然爲true。

但是,當將字段載入程序變量時,例如.net字符串類型,現在如果不使用trim()函數進行比較,情況會變得更加有趣。如「6」==「6」,你知道會有什麼結果。

這是一個非常有效的請求,需要注意TrimTrailingBlanks但是大多數情況下,數據庫在使用默認值時保持設置的一致性。