2011-05-16 90 views
1

嗨 Transact-SQL和MySQL中varchar的最大長度是多少? 我看到很多人在TSQL中使用varchar(max)。多久了? 在MySQL中,varchar(max)的等效表達式是什麼?sql中varchar的最大長度

感謝

+1

在TSQL,最多爲8000個字符。 – alex 2011-05-16 07:24:04

+0

varchar [(n | max)]可變長度的非Unicode字符數據。 n可以是從1到8,000的值。 max表示最大存儲大小爲2^31-1個字節,即2GB!謝謝 !!! – kevin 2011-05-16 07:39:36

回答

3

在MySQL,行的最大大小是64KB(65535)。

我不知道TSQL的,所以我做了一些研究:

在SQL Server 2000和SQL Server 7,行不能超過大小爲8000字節。這意味着VARBINARY列只能存儲8000個字節(假設它是表中唯一的列),VARCHAR列最多可存儲8000個字符,NVARCHAR列最多可存儲4000個字符(每個unicode字符2個字節)。此限制源於SQL Server用於將數據保存到磁盤的8 KB內部頁面大小。

要在單列中存儲更多數據,您需要使用存儲在8 KB數據頁集中的TEXT,NTEXT或IMAGE數據類型(BLOB),這些數據頁與存儲其他數據在同一張表中。這些數據頁面以B樹結構排列。 BLOB難以操作和操作。它們不能用作過程或函數中的變量,它們不能在字符串函數(如REPLACE,CHARINDEX或SUBSTRING)中使用。在大多數情況下,您必須使用READTEXT,WRITETEXT和UPDATETEXT命令來操作BLOB。

爲了解決這個問題,微軟推出了VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX),在SQL Server中的數據類型2005。這些數據類型可以保存數據的BLOB相同數量的可容納(2 GB )並且它們存儲在用於其他數據類型的相同類型的數據頁中。當MAX數據類型中的數據超過8 KB時,將使用溢出頁面。 SQL Server 2005自動爲頁面分配一個溢出指示符,並知道如何操作數據行,就像操縱其他數據類型一樣。您可以在存儲過程或函數內聲明MAX數據類型的變量,甚至將它們作爲變量傳遞。你也可以在字符串函數中使用它們。

Microsoft建議在SQL Server 2005中使用MAX數據類型而不是BLOB。實際上,在將來的SQL Server版本中將不推薦使用BLOB。

http://www.teratrax.com/articles/varchar_max.html

5

呼籲這些問題的第一站應該總是手冊。

  • 上VARCHAR MySQL手冊是here

  • 上VARCHAR的T-SQL手冊是here