MySQL中 char和varchar的區別
阿新 • • 發佈:2020-12-18
1. 最大字元長度
- CHAR(M)最大長度為255位元組(-1)
- VARCHAR(M)最大長度是65532位元組(-1)
2. 長度是否可變
- CHAR是定長的,這意味著,當你定義的欄位型別是CHAR(32),那麼無論你存1個還是10個字元,資料庫都是分配32個字元的空間。而後面沒用完的,就用空格填充。
- VARCHAR是變長的,這意味著,當你定義VARCHAR(32)的欄位,存1個字元就佔1個空間、存10個就佔10個空間,不進行額外填充。此外,VARCHAR值儲存的時候是“ 長度字首+資料”,長度字首為1位元組或2位元組,如果值不超過255個位元組,那麼長度是1位元組(8位就夠了),如果長度超過255個位元組,那麼長度就是2個位元組(8位不夠,需要16位)
3. 取資料的不同
- 資料庫取CHAR值時,尾部的空格會被刪除;
- 資料庫取VARCHAR值時,尾部的空格仍然保留。
4. 效能對比
- 從空間上考慮,一般VARCHAR更好,因為沒有多餘的空格填充。之所以說“一般”是因為當字串比較短時,VARCHAR額外的一個位元組的長度字首還是要考慮的。
- 從時間上考慮,CHAR更好。VARCHAR是按需分配空間,當字串長度或者長度字首變大,導致原來分配的空間無法滿足儲存需求時,系統會進行額外的操作。
5. 適用場景
- 長度固定或者長度變化不大的字串,用CHAR
- 長度變化較大的字串,用VARCHAR
- 此外,要結合實際的需求考慮,比如磁碟空間、響應速度等