2010-07-01 114 views
37

爲什麼我們總是需要指定VARCHAR(length)而不是僅僅是VARCHAR?無論如何它都是動態的。爲什麼VARCHAR需要長度指定?

UPD:我很困惑,因爲它是強制性的(例如在MySQL中)。

+2

可能的重複http://stackoverflow.com/questions/2241238/why-does-oracle-varchar2-have-a-mandatory-size-as-a-definition-parameter/2244926#2244926 – 2010-07-01 11:34:17

+0

謝謝,這個真的是重複的。 – Fixpoint 2010-07-02 08:11:15

回答

10

首先,它不需要它在所有數據庫中。看看SQL Server,它是可選的。

無論如何,它定義了字段內容的最大大小。它本身並不是一件壞事,它表達了意義(例如 - 電話號碼,在這個領域你不需要國際號碼)。

+3

確實,在未定義SQL Server中的大小時要小心,因爲根據場景的不同,默認情況會有所不同。 http://www.adathedev.co.uk/2010/04/sql-cast-to-varchar-without-size.html – AdaTheDev 2010-07-01 10:19:00

+0

「當在數據定義或變量聲明語句中未指定n時,默認長度爲1 。當使用CAST和CONVERT函數時未指定n時,默認長度爲30.「從提到的鏈接 – 2018-01-31 12:45:16

1

Wikipedia

VARCHAR字段可以是任何規模達 發揮到極致。該限制從 類型的數據庫不同,在Oracle 9i中 的數據庫有4000個字節的限制,一個 MySQL數據庫爲65,535 字節的限制(整行)和 微軟SQL Server 2005的8000個字節 (除非VARCHAR (max),其中 具有最大存儲容量 2,147,483,648字節)。

24

VARCHAR的「長度」不是內容的長度,而是內容的最大長度。

VARCHAR的最大長度不是動態的,它是固定的,因此必須指定。

如果您不想爲其定義最大大小,請使用VARCHAR(MAX)。

+3

爲什麼VARCHAR在默認情況下表示VARCHAR(MAX)? INT具有默認大小,所以爲什麼VARCHAR不能具有默認大小?當創建SQL標準時,這個設計決定背後的原因是什麼? – Fixpoint 2010-07-02 08:08:26

+1

當創建SQL Server標準時,VARCHAR(MAX)不存在。它是varchar(8000)或文本。 – 2010-07-02 08:31:52

+0

VARCHAR(MAX)的處理方式與VARCHAR(8000)(最大的非最大類型)不同。請僅在需要時使用VARCHAR(MAX),否則性能將受損。 https://dba.stackexchange.com/questions/173895/understanding-varcharmax-8000-column-and-why-i-can-store-more-than-8000-charac – bobroxsox 2017-09-18 20:55:05

3

數據庫對其存儲的數據瞭解得越多,在使用請求搜索/添加/更新數據時,可以進行的優化越多。

+4

它可以根據varchar max進行哪些優化長度,例如? – Fixpoint 2010-07-01 11:12:52

1

答案是你不需要需要,它是可選的。

如果你想確保字符串不超過一定的長度,它就在那裏。

5

您可以將其視爲數據的約束條件。它確保您不會存儲違反約束條件的數據。它在概念上類似於例如對整數列進行檢查約束,確保只輸入正值。

2

有可能的性能impact:在MySQL,temporary tablesMEMORY tables商店VARCHAR柱爲固定長度列,填補了它的最大長度。

如果你設計的VARCHAR列比你需要的最大尺寸大得多,你會消耗更多的內存。這會影響cache efficiency, sorting speed等。

因此,您給出了字符串下的最大長度。就像如果你最大長度的字符10,所以不要給他的長度100或更多。

相關問題