2013-02-19 112 views
1

這可能是一個愚蠢的問題,但我要問...char或varchar

我創建了一個MySQL表來處理圖像稱爲images。其中,我有一個屬性保持名爲extension的圖像的擴展名。

大多數接受的圖像擴展要麼jpgpnggifbmpjpegtiff換言之,最大的4字符。

現在,如果屬性在MySQL表等宣稱:

extension char(4) 

extension varchar(4) 

有可能沒有影響什麼那麼上的表現,但我不希望模型是從開始優化...

有人嗎?

回答

3

取決於....

如果你看看這個從MySQL文檔

Value  CHAR(4) Storage Required VARCHAR(4) Storage Required 
''   ' ' 4 bytes    ''   1 byte 
'ab'  'ab ' 4 bytes    'ab'  3 bytes 
'abcd'  'abcd' 4 bytes    'abcd'  5 bytes 
'abcdefgh' 'abcd' 4 bytes    'abcd'  5 bytes 

正如你可以看到4個字符CHAR需要4個字節,而VARCHAR需要5.如果絕大多數的擴展名將是4個字符,那麼CHAR將會更節省空間。

在你的情況,我猜測3將是多數,所以VARCHAR是更好的選擇。

James :-)

+0

只有字節不長度(​​colums); – zloctb 2014-11-03 20:40:20

2

編輯,我對我以前的答案做出錯誤的假設。我只會粘貼http://dev.mysql.com/doc/refman/5.0/en/char.html(強調增加)的摘錄

CHAR和VARCHAR類型是相似的,但它們的存儲和檢索方式不同。從MySQL 5.0.3開始,它們的最大長度以及是否保留了尾隨空格。

CHAR和VARCHAR類型聲明的長度指示要存儲的最大字符數。例如,CHAR(30)最多可以容納30個字符。

CHAR列的長度固定爲您在創建表時聲明的長度。長度可以是0到255之間的任何值。當存儲CHAR值時,它們用空格填充到指定的長度。當CHAR值被檢索時,尾隨空格被刪除。

VARCHAR列中的值是可變長度的字符串。在MySQL 5.0.3之前,長度可以指定爲0到255之間的值,5.0.3和更高版本中的長度可以爲0到65,535。 MySQL 5.0.3及更高版本中VARCHAR的有效最大長度取決於最大行大小(65,535字節,在所有列中共享)和使用的字符集。

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

+0

你可以把jpg或png,它只是填充它們! – 2013-02-19 09:41:36

+0

@JamesCulshaw你是完全正確的,謝謝指出, – 2013-02-19 09:44:37