char
定長 最多255字符 末尾的空格會被默認刪除
何時選用char類型儲存?
1 數據長度近似 如手機號 身份證 MD5加密后的值
2 短字符串 相對varchar可以節約一個儲存長度的空間
3 頻繁更新的字段 相對於varchar不會產生長度變化也就不會產生存儲碎片
varchar
varchar類型與char類型不同 為變長字符串
在字符長度不超過255時 使用一個字節存儲長度
超過255時用兩個字節存儲長度
每行的varchar總和不得超過65535字節 如果想存儲更長的字符串建議選用text格式
既然varchar是變長的 而且不超過255字符時都是用一個字節來存儲長度 那么是不是意味着varchar(4) 與varchar(100) 在存儲四個字符長度的內容 比如 "abcd"時是完全一樣的呢?
mysql在查詢時對於varchar字段在內存中是采用固定寬度而不是儲存時的變長寬度 尤其是查詢時創建的隱形臨時表 所以在選擇字段屬性時還是適可而止 根據自己的業務來選擇最合適的並且最小的長度 從而來提高查詢速度 減少數據庫服務器的開銷
何時選用varchar列來儲存?
1 字符串列最大長度比平均長度大很多的列 充分發揮變長的特點
2 字符串列較少被更新的列 因為innodb引擎一個存儲頁為16k 頻繁的更新變長字段可能導致存儲頁的分裂 產生存儲碎片
3 多字節字符集 如utf-8