美文网首页MySQLJava
MySql中varchar和char,如何选择合适的数据类型?

MySql中varchar和char,如何选择合适的数据类型?

作者: ChinaXieShuai | 来源:发表于2020-04-16 11:03 被阅读0次

    背景

    学过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版》第四章

    欢迎关注我个人公众号:java之旅

    相关文章

      网友评论

        本文标题:MySql中varchar和char,如何选择合适的数据类型?

        本文链接:https://www.haomeiwen.com/subject/srwlvhtx.html