MySQL 規劃欄位的時候, 常常會用到 char 與 varchar, 那這兩個的差異在哪邊? 怎麼樣使用才能節省空間呢?
MySQL CHAR 與 VARCHAR 的差異
此篇文章解釋說明的很清楚, 之前一直認為 varchar 會比較省空間, 原來是不一定的~
詳見: CHAR vs VARCHAR in MySQL, 下述內容摘錄整理自此篇:
下述就來對 CHAR 與 VARCHAR 做簡單的比較.
容忍長度
- char: 0 ~ 255
- varchar: 0 ~ 65535
儲存方式 與 佔用容量
CHAR(5)
- 內容 vs 實際儲存
- 'ex' 'ex ' 5 byptes # 會多存三個空白
- 'expe' 'expe ' 5 byptes
- 'exper' 'exper' 5 byptes
- 'expert' 'exper' 5 byptes
VARCHAR(5)
- 內容 vs 實際儲存
- 'ex' 'ex' 3 byptes # 多 1 byte 是存長度
- 'expe' 'expe' 5 byptes
- 'exper' 'exper' 6 byptes
- 'expert' 'exper' 6 byptes # 多 1 byte 不是存 t, 而是存長度
- 註: VARCHAR 超過 255 的話, 會多 2 bytes.
由上述可知, 若是對 CHAR(1) 這種 Flag(內容可能是存 y/n), 使用 VARCHAR 反而會多存 1 byte. (1 byte 內容, 1 byte 長度)