2010-01-16 61 views

回答

2

至於我記得是8000個字符。

爲nvarchar的是4000

+0

8000字符= 8000字節sqL – Kumar

+0

@Kumar:**是**對於'varchar'這是1個字符= 1個字節,用於'nvarchar'這是1個字符= 2字節 –

24

的Varchar是8000和nvarchar是4000

這裏的VARCHAR參考MSDN:
http://msdn.microsoft.com/en-us/library/aa258242(SQL.80).aspx

+0

8000字符= 8000個字節的SQL ???? – Kumar

+0

@Kumar:是的,對於VARCHAR,1個字符= 1個字節;對於NVARCHAR,1個字符= 2個字節 –

+1

這比這更復雜一點。簡短版本是,varchar和nvarchar在實際上將數據放到那裏之前不使用空間。 –

2

VARCHAR(最大值)的最大尺寸大( 2GB或2Gchars,我認爲)。您可以在VARCHAR指定N的最大值(N)爲8000,併爲nvarchar的是4000

+5

SQL 2000中沒有varchar(max) – MartW

+0

你是對的,但問題是無效的。我的答案的第二部分仍然存在 – erikkallen

11

SQL Server數據頁有8K:8192字節。從這一部分保留給頁頭,剩下8060字節是單行可以擁有的最大值。成一排,所述VARBINARY(n)的,VARCHAR(N)和nvarchar(n)的類型不能超過8000個字節,這意味着VARCHAR(8000)是最大的Ascii長度和nvarchar(4000)是最大的Unicode長度(因爲Unicode的將每個字符存儲在2個字節中)。

的所有這些細節的最好解釋來自Inside the Storage Engine: Anatomy of a page

+1

+1小技巧:Unicode不會將每個字符存儲在2個字節中。這取決於編碼。 UTF-8和UTF-16是可變長度編碼,UTF-32是我知道的唯一一個固定大小的編碼。其他編碼存在(UCS-2,UTF-7)。在內部,Microsoft通常使用UTF-16,其中字符的默認大小爲2個字節。對於至少所有基於.NET的產品和SQL Server都是如此。 – Abel

+0

@abel:SQL服務器[使用UCS-2LE編碼(http://msdn.microsoft.com/en-us/library/ms189617(V = SQL.105)的.aspx),而這正是每個字符2個字節。我同意,儘管如文中所言,'Unicode'並不嚴格限制每個字符2個字節。 –

+0

是的,你對UCS-2是正確的,我一直忘記,這是我的主要抱怨之一,因爲它只允許BMP字符。 Tx指出那:) – Abel

相關問題