2017-04-15 854 views
-5

我們知道varchar是一個可變長度的數據類型,那麼mysql中的varchar(3)和varchar(300)有什麼區別?varchar(3)和varchar(300)之間的區別

+8

297個字符。 –

+0

你的問題不清楚。你真的不明白3和300之間的區別嗎? –

+1

假設我想在我的列中插入單個字符,那麼兩者之間的區別是什麼?爲什麼我們使用varchar(1)爲什麼不使用varchar(100)? –

回答

3

SQL中的varchar是一個長度不等的字符串。傳統上,您需要爲此字符串指定一個上限。這裏有一些事情要了解varchar

  • 字符串這比規定的限制短不佔用額外的空間:他們只佔用所需的空間。
  • 如果字符串長於限制,整個記錄都會被拒絕,當您嘗試INSERT記錄時,以及當您嘗試記錄UPDATE時。
  • 傳統上upper上限爲255個字符。現代數據庫不再有這個限制。
  • 某些數據庫(如PostgreSQL)建議您不再以此方式指定長度。相反,他們建議使用無限串(不帶長度的varchar),並使用CHECK CONSTRAINT代替限制。
  • 大多數現代數據庫比以往更有效地處理字符串,因此對字符串大小的限制較少。

簡短的回答你的問題是,無論varchar(3)varchar(300)有限長度的字符串,都將允許不受處罰短字符串。不過很明顯一個是比其他短。

+0

請注意[MySQL忽略'CHECK'](https://dev.mysql.com/doc/refman/5.7/en/create-table.html#create-table-indexes-keys)。 – Schwern

+0

@Schwern我沒有意識到這一點。我發現它將在未來的MariaDB 10.2版本中得到支持,這也是遷移的另一個原因。 – Manngo

1

除了@Manngo's answervarchar(300),因爲它的最大超過255從the MySQL docs具有開銷比varchar(3)一個額外的字節...

相較於CHAR,VARCHAR值存儲爲1字節或2字節長度的前綴加數據。長度前綴表示該值中的字節數。如果值不超過255個字節,則列使用一個長度字節,如果值可能需要超過255個字節,則使用兩個長度字節。

基本上,必須存儲字符串的長度。 1個字節只能容納0到255,所以2個字節來存儲長度可以達到300

假設我想在我的那個場景中柱插入單個字符之間有什麼區別兩個??爲什麼我們使用varchar(1)爲什麼不使用varchar(100)?

如果列只應該永遠保存單個字符,使用char(1),單字節,以保證數據的完整性(varchar(1)是兩個字節)。這可確保使用該列的任何人只會獲得他們期望的內容,而不必進行自己的數據驗證。

由於varchar的大小僅爲最大值,因此指定較小的值不會使該表使用更少的磁盤(除非如上所述大約> 255)。避免爲列添加任意限制和業務規則。例如,如果您要存儲網址或電子郵件地址,幾乎沒有理由不允許varchar(255)。基於業務規則和用戶體驗問題的限制應該在更高的層次上進行,而不受數據庫模式的限制。

相關問題