4

我有SQL Server中的表說「Temp」,它有Addr1,Addr2,Addr3,Addr4列和一些其他列也在那裏。列SQL Server大小差異

這些Addr1,Addr2,Addr3和Addr4是nvarchar類型。當我通過對象瀏覽器檢查此列的大小時。它在nvarchar(100)中顯示它們全部。

enter image description here

但是當我檢查他們可以使用Alt + F1。它顯示結果窗格中的細節,長度爲200.截圖如下。

enter image description here

爲什麼會有不同? 如果我輸入超過100個字符,我會得到截斷錯誤?似乎只需要100個字符。

請問請告訴我長度值是什麼意思?

謝謝, 普拉卡什。

+0

[這裏已經anwered](http://stackoverflow.com/a/21259797/4366471)。 –

+1

@WojciechTomczyk是嗎?這個答案似乎並沒有專門針對你在對象資源管理器中看到的與'sp_help'的結果之間的差異,只是指出'NVARCHAR'值需要兩倍的存儲空間。除非我誤解了你所鏈接的問題/答案。 – 3N1GM4

+0

@ 3N1GM4是的,+1。我太熱心於鏈接答案... –

回答

9

因爲在對象資源管理器中列出的大小是字符,並在查詢中sp_help結果中列出的大小數是字節數

VARCHAR SQL中的值每個字符使用1個字節,而NVARCHAR值使用每個字符2個字節。兩者都需要2字節開銷 - 見下文。因此,因爲您正在查看NVARCHAR列,這些列需要200(實際上爲202)字節來存儲100個字符,其中VARCHAR只需要100(真的是102)。

參考文獻:

MSDN: char and varchar

存儲大小爲輸入+ 2個字節的數據的實際長度。

MSDN: nchar and nvarchar

存儲大小,以字節爲單位,是兩次數據的實際長度輸入+ 2個字節。

(重點煤礦)

MSDN: sp_help:與數據庫對象

報告信息(在sys.sysobjects兼容性視圖中列出的任何物體),用戶定義的數據類型,或數據類型。

 
    /------------------------------------------------------------------------\ 
    | Column name | Data type | Description         | 
    |-------------+-----------+----------------------------------------------| 
    | Length | smallint | Physical length of the data type (in bytes). | 
    \------------------------------------------------------------------------/ 
+0

好知道! :) –

+0

謝謝。現在我明白了.. –

+0

隨時接受答案,如果它回答你的問題@ ps_prakash02 - 很高興我可以幫助! – 3N1GM4