2010-06-09 220 views
4

我正在使用的軟件使用文本字段來存儲XML。從我的在線搜索中,文本數據類型應該保存2^31 - 1個字符。目前,SQL Server每次都會截斷65,535個字符的XML。我知道這是由SQL Server引起的,因爲如果我直接在Management Studio中向該列添加第65,536個字符,則表明它不會更新,因爲字符將被截斷。SQL Server文本數據類型最大長度= 65,535?

最大長度真的是65535還是這可能是因爲數據庫是在早期版本的SQL Server(2000)中設計的,它使用的是傳統的text數據類型而不是2005的?

如果是這樣,SQL Server 2005中將數據類型更改爲Text解決了這個問題?

+0

它是同步過程中鏡像數據庫的一部分。我希望避免在所有客戶端上修改該字段。 – craigmj 2010-06-09 17:35:38

回答

9

不是文本字段的SSMS的限制,但你應該使用VARCHAR(最大值),因爲文本已被棄用

alt text

這裏也是一個快速測試

create table TestLen (bla text) 

insert TestLen values (replicate(convert(varchar(max),'a'), 100000)) 

select datalength(bla) 
from TestLen 

我的退貨100000

0

MSSQL 2000應該允許在超過20億的文本字段中存儲最多2^31 - 1個字符(非unicode)。不知道是什麼導致了這個限制,但你可能想嘗試使用varchar(max)或nvarchar(max)。這些存儲的字符數量很多,但也允許使用常規字符串T-SQL函數(如LEN,SUBSTRING,REPLACE,RTRIM等)。

+2

事實上,nvarchar只存儲一半字符數,因爲它是unicode,每個字符使用2個字節。 – Koen 2010-06-09 17:36:03

0

如果您可以轉換該列,那麼您可能也會這樣做,因爲text數據類型將在未來版本的SQL Server中刪除。 See here

建議使用varchar(MAX)nvarchar(MAX)。在你的情況下,你也可以使用XML數據類型,但這可能會使你與特定的數據庫引擎(如果這是一個考慮因素)。

相關問題