2014-03-01 84 views

回答

4

當MySQL(或任何數據庫或計算機語言)存儲可變長度的字符串,基本上有存儲該值的方法有兩種:

  • 長度可被編碼,接着由字符在字符串中
  • 串的末端可以通過一個特殊的字符進行標記(通常'0'

數據庫(幾乎?)總是使用長度編碼。所以,當你存儲'ABC'作爲一個可變長度的字符串,在數據庫中存儲它看起來像:

3 A B C 

當存儲'A'

1 A 

這樣,MySQL的知道什麼時候一個字符串結束,接下來開始。不同類型的不同長度取決於字符串的最大長度。因此,1個字節可以保存0到255之間的值。2個字節可以保存0到65,535之間的值,依此類推。

當你使用正則表達式字符,說char(3),然後'ABC'樣子:

A B C 

這佔據三個字節/任何(取決於字符編碼)。該長度可以從表元數據中獲知。

隨着char(3),串'A'也佔據三個插槽:

A   
---^space here 
--------^space here 

額外的兩個是通過空間佔用。對於長字符串,這通常是空間的大量浪費,這就是爲什麼大多數字符串存儲爲varchar而不是char

+0

謝謝你的回答,但爲什麼VARCHAR需要一些時間1個字節,有時2個字節,爲什麼CHAR不需要額外的字節? –

+0

@VarunAgw。 。 。閱讀最後一段,瞭解爲什麼'varchar'有時使用一個字節,有時使用2個字符。'char'不需要額外的字節,因爲長度是已知的:字符串中的字符數存儲在數據庫中,長度爲從表格的格式可知。 –

相關問題