2009-04-22 23 views
3

我正在搜索MS-SQL Server 2005數據庫,以確保某個文本字段的長度始終爲8的倍數。當我運行以下查詢時,我得到了幾行長度爲30的數據。但是當我調查這些記錄時,我發現它們比這更長。但是,如果我將varchar的長度指定爲更長的東西(如以下查詢中所示),則它可以正常工作。爲什麼在不指定長度的情況下將文本轉換爲varchar會截斷30個字符處的文本?

select distinct len(cast(textfield as varchar(1000))) from tablename

有人知道爲什麼它默認爲30,如果這是一個可配置的設置?

回答

0

這是一個任意數字,據我所知不可配置。我想不出一個你不想指定長度的情況。當有需要適合該列許多不同行

1

鑄造可能發生。數據庫引擎,因爲它不完美,不想去檢查查詢可能返回的所有可能行的長度,以找出設置最大值的時間長度,因此它不檢查任何行 - 它只需要30的默認值,這是一個任意粗略的猜測,因爲它不知道更好。

可以說,他們可能很聰明地將默認值設置爲256,或者VARCHAR的最大長度是什麼,但我想比什麼都重要,這是一個有用的提醒,它真的不知道如何除非你告訴它,否則你只需要它。

相關問題