MySql中varchar和char,如何選擇合適的數據類型?


背景

學過MySQL的同學都知道MySQL中varchar和char是兩種最主要的字符串類型,varchar是變長的類型,而char是固定長度。那關於如何選擇類型就成為令人頭疼的事,很多初學者為了保證業務兼容性強,存儲字符串類型一律都是varchar類型。這是不妥的,需要根據varchar和char的特性來進行選擇。

varchar和char數據類型的區別

varchar類型用於存儲可變長的字符串,是比較常見常用的字符串數據類型,在存儲的字符串是變長時,varchar更加節約空間。由於varchar是變長的,在使用update的時候,可能使得行變得比原來更長,這就導致需要做額外的工作。如果一個行占用的空間增加,並且在頁內沒有多余的空間可與存儲,這是innoDB的存儲引擎需要分裂頁來使行可以放進頁內。

char類型是定長的。在存儲數據時,MySQL會刪除所有文末的空格,所以,即便你存儲的是:'abc ',注意這個字符串末尾是有空格的,也會在存儲時把這個空格刪掉,這點需要注意。

適用的場景

varchar適用的場景:

  • 字符串列的最大長度比平均長度要大很多;
  • 字符串列的更新很少時,因為沒有或很少有內存碎片問題;
  • 使用了UTF-8這樣復雜的字符集,每個字符都使用不同的字節數進行存儲;

char適用的場景:

  • 列的長度為定值時適合適用,比如:MD5密文數據

varchar和char的優缺點

varchar的優點:

  • 變長的字符串類型,兼容性更好

varchar的缺點:

  • 使用varchar可能會產生內存碎片
  • varchar會額外需要1到2個字節存儲長度信息
  • update語句可能會導致頁分裂

char的優點:

  • 定長的字符串類型,減少內存碎片
  • 無需額外的內存空間去存儲長度信息

char的缺點:

  • 會刪除列末尾的空格信息

參考:
《高性能MySQL第3版》第四章

圖片名稱


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM