mysql(5.1)中char與varchar的區別分析

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

image

請注意上表中最後一行的值只適用不使用嚴格模式時;若是MySQL運行在嚴格模式,超過列長度不的值保存,而且會出現錯誤。img

從CHAR(4)和VARCHAR(4)列檢索的值並不老是相同,由於檢索時從CHAR列刪除了尾部的空格。經過下面的例子說明該差異:di

image
在MySQL中的全部CHAR和VARCHAR值比較時不須要考慮任何尾部空格
相關文章
相關標籤/搜索