2011-09-29 61 views
5

CHAR存儲爲固定長度字符串,VARCHAR存儲爲可變長度字符串。我可以使用VARCHAR來存儲固定長度的字符串,但爲什麼人們仍然想使用CHAR來存儲固定長度的字符串?在VARCHAR上使用CHAR有什麼好處嗎?如果沒有任何好處,爲什麼mySQL數據庫不會刪除CHAR選項?使用CHAR over VARCHAR的好處是什麼?

+0

http://stackoverflow.com/questions/59667/why-would-i-ever-pick-char-over-varchar-in-sql –

+0

http://stackoverflow.com/questions/350195/char-vs -varchar-for-performance-in-stock-database –

+0

ops,抱歉有重複的問題。得到了答案。感謝您的鏈接。 – zac1987

回答

5
  • VARCHAR

VARCHAR存儲可變長度的字符串。它可以比固定長度類型需要更少的存儲空間,因爲它只需要儘可能多的空間。

varchar還使用1或2個額外的字節來記錄值的長度。例如varchar(10)將使用多達11個字節的存儲空間。 varchar幫助性能,因爲它節省了空間。然而,因爲行的長度是可變的,所以當你更新它們時它們可以增長,這會導致額外的工作。如果行的增長和在原來的位置不再適合,該行爲是存儲引擎依賴...

  • CHAR

焦炭是固定長度的,mysql的總是指定分配足夠的空間字符數。當存儲CHAR值時,MySQL將刪除任何尾隨空格。根據需要使用空格填充值以進行比較。

如果要存儲非常短的字符串,或者如果所有值都接近 的長度相同,字符很有用。例如,對於用戶密碼爲 的MD5值,CHAR是一個不錯的選擇,它們的長度始終相同。

對於頻繁更改的數據,char也比VARCHAR更好,因爲固定長度的行不容易出現碎片。

+0

現在我看到了CHAR對頻繁更新值的好處。非常感謝你。 – zac1987

+0

旁註:我不會說char是MD5哈希或者真正的哈希的好選擇。它們應該以二進制格式存儲,而不是像十六進制那樣的不同編碼。 – Luc

+0

我相信查找速度更快,因爲數據庫能夠立即知道要去哪裏,而不必進行長度計算,但這些日子可能不會太明顯 –

相關問題