varchar是存儲可變長度的字符串,簡單的說我們定義表機構的時候指定的字段長度是最大長度,當字符串沒有達到最大長度的時候以字符串的實際長度來存儲的,不占用多余的存儲空間。
一般情況下使用varchar(10)和varchar(100)保存'fuk'占用的空間都是一樣的,但是更小的varchar(10)有着更好的性能。
比如:MySQL建立索引時如果沒有限制索引的大小,索引長度會默認采用的該字段的長度,也就是說varchar(100)建立的索引存儲大小要比varchar(10)建立索引存儲大小大的多,加載索引使用的內存也更多。 比如:Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 65,535. The effective maximum length of a VARCHAR is subject to the maximum row size ( 65,535 bytes, which is shared among all columns) 就說所,所有的列長度加起來不能操作65,535 bytes大小,如果你的varchar長度設置大了,那么給其他列使用的長度大小就小了。關於這個更多介紹,請看column-count-limit 實際中根據使用場景選擇合適的長度就ok了。
較大的列使用更多的內存,因為MySQL通常會分配固定大小的內存塊來保存值,這對排序或使用基於內存的臨時表尤其不好。同樣的事情也會發生在使用文件排序或者基於磁盤的臨時表的時候。所以在設計數據庫的時候,考慮字段的最大容量也是提升性能的一個點。