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之旅

相关文章
相关标签/搜索