1. 程式人生 > 資料庫 >MySQL中 char和varchar的區別

MySQL中 char和varchar的區別

1. 最大字元長度

  • CHAR(M)最大長度為255位元組(2^{8}-1)
  • VARCHAR(M)最大長度是65532位元組(2^{16}-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
  • 此外,要結合實際的需求考慮,比如磁碟空間、響應速度等