很多地方在分析char與varchar資料類型選擇原則上,往往忽略了儲存引擎。事實上,我們應根據選定的儲存引擎,決定如何選擇合適的資料類型。
值 | #char(3) | 實際儲存字元長度 | varchar(3) | 實際儲存字元長度 |
---|---|---|---|---|
#」 | ' ' | ##3」 | 1 | |
'ab ' | 3 | #'ab' | 3 | |
#'abc' | 3 | 'abc ' | 4 | |
#'abc' | 3 | 'abc' | 4 |
char屬於定長類型,varchar屬於非定長類型,varchar屬於變長。或許有人會問為什麼varchar長度比資料長度大呢?因為VARCHAR保存時用一個位元組或兩個位元組長的前綴+資料。如果VARCHAR列宣告的長度大於255,長度前綴是兩個位元組,否則是一個位元組。
對於InnoDB資料表,內部的行儲存格式沒有區分固定長度和可變長度列(所有資料行都使用指向資料列值的頭指標),因此在本質上,使用固定長度的CHAR列不一定比使用可變長度VARCHAR欄位簡單。因而,主要的效能因素是資料行使用的儲存總量。由於CHAR平均佔用的空間多於VARCHAR,因此使用VARCHAR來最小化需要處理的資料行的儲存總量和磁碟I/O是比較好的。
答:不是這樣的,(網路上說5.0之前版本是這樣的,沒有測試)。 mysql varchar(20) 不管中文還是英文都能存20個,但varchar字段的最大長度跟編碼有關,如果是utf-8,那麼大概65535/3,如果是gbk,那麼大概65535/2
#