CHAR和VARCHAR類型相似,但它們保存和檢索的方式不一樣。它們的最大長度和是否尾部空格被保留等方面也不一樣。在存儲或檢索過程當中不進行大小寫轉換。.net
CHAR和VARCHAR類型聲明的長度表示你想要保存的最大字符數。例如,CHAR(30)能夠佔用30個字符。code
CHAR列的長度固定爲建立表時聲明的長度。長度能夠爲從0到255的任何值。當保存CHAR值時,在它們的右邊填充空格以達到指定的長度。當檢索到CHAR值時,尾部的空格被刪除掉。在存儲或檢索過程當中不進行大小寫轉換。字符串
VARCHAR列中的值爲可變長字符串。長度能夠指定爲0到65,535之間的值。(VARCHAR的最大有效長度由最大行大小和使用的字符集肯定。總體最大長度是65,532字節)。get
同CHAR對比,VARCHAR值保存時只保存須要的字符數,另加一個字節來記錄長度(若是列聲明的長度超過255,則使用兩個字節)。it
VARCHAR值保存時不進行填充。當值保存和檢索時尾部的空格仍保留,符合標準SQL。im
若是分配給CHAR或VARCHAR列的值超過列的最大長度,則對值進行裁剪以使其適合。若是被裁掉的字符不是空格,則會產生一條警告。若是裁剪非空格字符,則會形成錯誤(而不是警告)並經過使用嚴格SQL模式禁用值的插入。static
下面的表顯示了將各類字符串值保存到CHAR(4)和VARCHAR(4)列後的結果,說明了CHAR和VARCHAR之間的差異:top
請注意上表中最後一行的值只適用不使用嚴格模式時;若是MySQL運行在嚴格模式,超過列長度不的值不保存,而且會出現錯誤。img
從CHAR(4)和VARCHAR(4)列檢索的值並不老是相同,由於檢索時從CHAR列刪除了尾部的空格。經過下面的例子說明該差異:di
在MySQL中的全部CHAR和VARCHAR值比較時不須要考慮任何尾部空格