小白学习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 - 变通创建索引的案例一则

小白学习MySQL - “投机取巧”统计表的记录数

小白学习MySQL - 一次慢SQL的定位

小白学习MySQL - TIMESTAMP类型字段非空和默认值属性的影响

小白学习MySQL - 聊聊数据备份的重要性

小白学习MySQL - InnoDB支持optimize table?

小白学习MySQL - table_open_cache的作用

小白学习MySQL - 表空间碎片整理方法

小白学习MySQL - 大小写敏感问题解惑

小白学习MySQL - only_full_group_by的校验规则

小白学习MySQL - max_allowed_packet

小白学习MySQL - mysqldump保证数据一致性的参数差异

小白学习MySQL - 查询会锁表?

小白学习MySQL - 索引键长度限制的问题

小白学习MySQL - MySQL会不会受到“高水位”的影响?

小白学习MySQL - 数据库软件和初始化安装

小白学习MySQL - 闲聊聊

近期更新的文章:

介绍一款Oracle的利器小工具-SQLcl

ClickHouse的ontime测试数据集

表和索引统计信息自动采集的问题

小白学习MySQL - 变通创建索引的案例一则

ClickHouse安装和使用

文章分类和索引:

《公众号800篇文章分类和索引

以上是关于小白学习MySQL - varchar类型字段为什么经常定义成255?的主要内容,如果未能解决你的问题,请参考以下文章

小白学习MySQL - TIMESTAMP类型字段非空和默认值属性的影响

小白学习MySQL - 降序索引的功能和作用

小白学习MySQL - 降序索引的功能和作用

mysql小白系列_04 datablock

Mysql中把varchar类型的字段转化为tinyint类型的字段

mysql字段类型