許多使用MySQL的同學都會使用到varchar這個數據類型。初學者剛開始學習varchar時,一定記得varchar是個變長的類型這個知識點,所以很多初學者在設計表時,就會把varchar(X)的長度設置的非常長,目的也是為了保證以后有更長的數據存儲時,能更好的兼容。
於是本來varchar(10)就可以滿足當前的存儲的長度需求了,改成了varchar(100)。
那么疑問來了:
既然是變長類型,varchar(10)和varchar(100)有什么區別?
先舉個例子:如果要存儲'hello12345'這個字符串,使用varchar(10)和varchar(100)存儲,占用磁盤空間是一樣的么?
答案是:占用磁盤的存儲空間是一樣的。
既然存儲時磁盤占用空間一樣,還有什么其他的區別嗎?
雖然使用varchar(100)和varchar(10)存儲'hello12345'字符串占用的磁盤空間一樣,但是消耗的內存不一樣,更長的列消耗的內存會更多。因為MySQL通常會分配固定大小的內存塊來保存內部值。尤其是使用臨時表進行排序會操作時,會消耗更多的內存。在使用磁盤進行排序時,也是一樣。
所以此時varchar(100) 會消耗更多的內存。
varchar(10)和varchar(100)的優劣勢是什么?
因為涉及到文件排序或者基於磁盤的臨時表時,更長的列會消耗更多的內存,所以在使用使用時,我們不能太過浪費內存空間,還是需要評估實際使用的長度來設置字符的長度。推薦冗余10%的長度(因業務而異)。
所使用varchar(10)會更加節約內存空間,但是實際業務中字符長度一旦超過10就需要更改表結構,在表數據量特別大時,不易拓展。
而這時使用更長的列:varchar(100)無需更改表結構,業務拓展性更好。