CHAR
和VARCHAR
都是字符串類型,它們的具體區別為:
長度大小區別:
CHAR(M)
定義的列的長度為固定的,M取值可以為0~255之間;VARCHAR(M)
定義的列的長度為可變長,M取值可以為0~65535之間,(VARCHAR的最大有效長度由最大行大小和使用 的字符集確定。整體最大長度是65,532字節)。
存數據時的區別:
- CHAR值存儲時,如果字符數沒有達到定義的位數,會在后面用空格補全,再存入數據庫中。比如定義
CHAR(10)
,那么不論存儲的數據是否達到了10個字節,都要占去10個字節的空間,不足的自動用空格填充;
- VARCHAR值保存時只保存需要的字符數,另加一個字節來記錄長度(如果列聲明的長度超過255,則使用兩個字節)。VARCHAR值保存時不進行填充。
取數據時的區別:
- 數據庫取CHAR值時,尾部的空格會被刪除;
- 數據庫取VARCHAR值時,尾部的空格仍然保留。
總結:
CHAR定長,一般用於固定長度的表單提交數據存儲 ;例如:身份證號,手機號,電話,密碼等;而VARCHAR不定長。
從空間上考慮,VARCHAR更好,從效率上考慮,CHAR更好。
這其中的選擇就需要我們根據情況自己考量。