本文主要是介绍MySQL varchar最大长度,text类型占用空间剖析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
MySQL表中行的最大大小为65,534(实际行存储从第二个字节开始)字节。每个BLOB和TEXT列 账户只占其中的5至9个字节。
那么来验证下varchar
类型的实际最大长度:
测试环境:MySQL版本 5.6.17
这里看到21845个字符,utf-8
下刚好为65535个字节,但是varchar
保存时用一个字节或两个字节长的前缀+数据。如果varchar
列声明的长度大于255,长度前缀是两个字节,所以varchar的最大长度应为:
看示例:
那么看下text
类型在实际行中占用的字节数:
可以看出错误提示,行长已经超过最大长度。在上文看到,
每个BLOB和TEXT列 账户只占其中的5至9个字节。
但是va
字段已经给tx
字段腾出了9字节的空间了啊,为什么还是不行呢。
最好再官方文档看到
BLOB和TEXT类型需要 1、2、3或者4个字节来记录列值的长度,取决于该类型的最大可能的长度。
那么就是至少需要10字节(9+1)的空间了,再试一下:
这里看到,当va
字段腾出12字节的空间时,表可以创建成功。
char 范围是0~255,
varchar最长是64k,但是注意这里的64k是整个row的长度,要考虑到其它的column,还有如果存在not null的时候也会占用一位,对不同的字符集,有效长度还不一样,比如utf8 的,最多21845,还要除去别的column,但是varchar在一般情况下存储都够用了。
如果遇到了大文本,考虑使用text,最大能到4G。效率来说基本是char>varchar>text,但是如果使用的是Innodb引擎的话,推荐使用varchar代替char。char和varchar可以有默认值,text不能指定默认值数据库选择合适的数据类型存储还是很有必要的,对性能有一定影响。
对于int类型的,如果不需要存取负值,最好加上unsigned;对于经常出现在where语句中的字段,考虑加索引,整形的尤其适合加索引。
这篇关于MySQL varchar最大长度,text类型占用空间剖析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!