2012-01-27 519 views
12

可能重複:
is there an advantage to varchar(500) over varchar(8000)?varchar(5)和varchar(5000)之間的區別?

在SQL Server中,我們可以指定字段類型varchar(n)

存儲大小爲實際長度中輸入的數據字節,不是 字節。

通常規劃數據庫結構,當我試着想象的字符串將被存儲在這些領域varchar的最大可能的長度,然後設置想象大小+一些備份的varchar領域。有時候可能會出現這樣的情況:最初提供的房間不足以滿足現場需要,然後我需要增加長度。

但實際上,是否值得將varchar字段限制爲某個值,而不是僅僅設置類似varchar(5000)甚至varchar(max)這將100%適合這種情況?當我限制長度爲n時,在SQL Server或索引組織中的頁組織中是否有任何優勢?

更新

這裏是我的意思(優勢):https://stackoverflow.com/a/5353196/355264

是,查詢優化器可以猜出多少行適合在一個頁面上,如果你 有很多大於必需的varchar字段,SQL 服務器可以在內部猜測錯誤的行數。

以上是真的嗎?還有其他優點嗎?

+1

[varchar(500)over varchar(8000)是否有優勢?](http://stackoverflow.com/questions/2009694/is-there-an-advantage-to -varchar500-over-varchar8000)或[varchar(ma x)到處?](http://stackoverflow.com/questions/2091284/varcharmax-everywhere)或[SQL Server VARCHAR列寬](http://dba.stackexchange.com/questions/11614/sql-server- varchar-column-width) – 2012-01-27 12:24:20

+0

RE:你的編輯。看到[我的答案在這裏](http://stackoverflow.com/questions/2009694/is-there-an-advantage-to-varchar500-over-varchar8000/5654947#5654947) – 2012-01-27 12:46:29

回答

17

首先 - 你不能索引超過900字節大小的任何列。

這本身(對我來說)是反對使用varchar(5000)(或varchar(max))所有的時間殺手的標準,即使不需要....

使用適當的大小。

另外:varchar會增加至少2個字節的開銷,所以對於10個字符或更少的字符串,我總是建議使用char(n)來代替。

char(5)將使用5個字節的存儲 - 總是。 varchar(5)使用2到7個字節的存儲空間。

+2

所以實際上'varchar(15)'將是在效率和速度方面與'varchar(500)'相同,對嗎?即如果我認爲數據將在15-20字節左右(可能更少或更長一點),我可以指定'varchar(150)'?這實際上是我的主要問題。 – 2012-01-27 12:24:44

+0

我不明白,「總是」...使用varchar(500)或varchar(max)之間的問題排除任何暗示字符串通常不超過10個字符的建議。 – 2014-03-18 09:51:04

+1

'char(100)'類型的列將總是**正好100個字符 - 即使您只存儲了「Isaac」,它也會被填充到指定長度(100個字符),並帶有空格 - 所以你真的存儲'Isaac ....................' - 這是非常低效的 – 2014-03-18 09:52:28

12

MS SQL Server存儲varchar(8000),與varchar(MAX)不同。

在這MAX類型移出表的數據頁和 到它自己的數據頁的大小現在固定爲8000個字節,如果[大值 類型在行外]設置爲OFF。

有幾個原因,爲什麼你會使用使用VARCHAR(n)的,而不是VARCHAR(MAX)

性能

VARCHAR(n)的更快 http://rusanu.com/2010/03/22/performance-comparison-of-varcharmax-vs-varcharn/

索引

VARCHAR(900)和更小的可以被索引,而不是VARCHAR(MAX)或varchar(901)或更大的

兼容性

MS SQL Server精簡版不支持varchar(MAX)