我想查找表中指定的字符串列的長度。查找varchar(max)列的長度
我在CHARACTER_MAXIMUM_LENGTH
的幫助下從infomation_schema.columns
這樣做。
但是,對於varchar(max)
,它返回-1。我想知道是否應該返回允許的最大長度,只要varchar(max)
,nvarchar(max)
等欄位出現在表格中?
我想查找表中指定的字符串列的長度。查找varchar(max)列的長度
我在CHARACTER_MAXIMUM_LENGTH
的幫助下從infomation_schema.columns
這樣做。
但是,對於varchar(max)
,它返回-1。我想知道是否應該返回允許的最大長度,只要varchar(max)
,nvarchar(max)
等欄位出現在表格中?
是的,varchar(max)或nvarchar(max)列的最大長度不是無限的。 存儲限制爲2GB(2^31 -1字節)。 當數據小於8kb時,它的行爲與常規varchar/nvarchar列相同。然後,當單個行的數據大於8kb時,它將存儲爲大對象文本/ ntext值。你可以把它想象爲2種數據類型的包裝。
但是,最大字符長度不是2000000000
。 varchar(max)列爲2147483645,nvarchar(max)列爲1073741822。 這是因爲nvarchar每個字符有2個字節,而varchar每個字符有1個字節,需要2個字節來存儲變量列的數據長度。
我不認爲任何額外的元數據會從2GB的限制中減去,但是如果我找到其他東西,我會在明天發表評論。
information_schema.columns是varchar,nvarchar列的理論長度。不是實際的。一個(最大)列可以是0到2000000000字節:你不能在此基礎上進行任何計算。 10個varchar列,每個長度爲100可能需要0或1000個字節:仍是一個很大的變化 – gbn 2012-02-02 15:29:38
您是否試圖找到列中字符串的最大可能長度或列中最長字符串的長度?您可以將'varchar(max)'視爲無限制(在合理範圍內)。 – Ray 2012-02-02 15:31:02
IIRC,'nvarchar(MAX)'相當於傳統的'ntext'類型,對嗎?這意味着就行存儲而言,它的處理方式與'nvarchar(4000)'不同。其中,我相信是'nvarchar(MAX)'之前的最大值。 – Yuck 2012-02-02 15:42:29