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

背景

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

varchar和char數據類型的區別

varchar類型用於存儲可變長的字符串,是比較常見經常使用的字符串數據類型,在存儲的字符串是變長時,varchar更加節約空間。因爲varchar是變長的,在使用update的時候,可能使得行變得比原來更長,這就致使須要作額外的工做。若是一個行佔用的空間增長,而且在頁內沒有多餘的空間可與存儲,這是innoDB的存儲引擎須要分裂頁來使行能夠放進頁內。性能

char類型是定長的。在存儲數據時,MySQL會刪除全部文末的空格,因此,即使你存儲的是:'abc ',注意這個字符串末尾是有空格的,也會在存儲時把這個空格刪掉,這點須要注意。內存

適用的場景

varchar適用的場景:字符串

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

char適用的場景:class

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

varchar和char的優缺點

varchar的優勢:兼容性

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

varchar的缺點:date

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

char的優勢:數據類型

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

char的缺點:im

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

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

歡迎關注我我的公衆號:java之旅

相關文章
相關標籤/搜索