小白学习MySQL - varchar类型字段为什么经常定义成255?
Posted bisal
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小白学习MySQL - varchar类型字段为什么经常定义成255?相关的知识,希望对你有一定的参考价值。
很多时候我们看到一些表字符串类型的字段定义为varchar(255),开始以为varchar只能定义为255这个长度值,其实不然。
官方文档所说,varchar有效的最大长度取决于行的容量,以及用的字符集,整行的所有列的定义长度不能超过65535字节(bytes),text、blob等大字段类型除外,
P.S. https://dev.mysql.com/doc/refman/5.7/en/char.html
《小白学习MySQL - 变通创建索引的案例一则》提到了,
InnoDB,如果需要建索引,就不能超过767bytes,utf8编码,255*3=765 bytes,是能建索引情况下的最大值,utf8mb4编码,默认字符长度则应该是767除以4向下取整,就是191。如果设置了innodb_large_prefix,最大长度是3072字节,utf8编码,1024*3=3072 bytes,utf8mb4编码,768*4=3072。
MyISAM,如果需要建索引,就不能超过1000bytes,utf8编码,333*3=999 bytes,是能建索引情况下的最大值,utf8mb4编码,默认字符长度则应该是1000除以4,就是250。
一般情况下,我们用的是InnoDB引擎,utf8则是常用字符集,因此varchar类型字段定义为255比较合适。
但实际上,varchar(255)并不是最优的字符定义长度,究竟定成多少,还是要根据实际需求来决定,例如这个字段我就不需要创建索引,定义超过255,是可以的,只能说255是常规情况下较少出错的一个值。
小白学习MySQL,
《小白学习MySQL - TIMESTAMP类型字段非空和默认值属性的影响》
《小白学习MySQL - InnoDB支持optimize table?》
《小白学习MySQL - table_open_cache的作用》
《小白学习MySQL - only_full_group_by的校验规则》
《小白学习MySQL - max_allowed_packet》
《小白学习MySQL - mysqldump保证数据一致性的参数差异》
《小白学习MySQL - MySQL会不会受到“高水位”的影响?》
近期更新的文章:
文章分类和索引:
以上是关于小白学习MySQL - varchar类型字段为什么经常定义成255?的主要内容,如果未能解决你的问题,请参考以下文章
小白学习MySQL - TIMESTAMP类型字段非空和默认值属性的影响