

`name` varchar(100) NOT NULL DEFAULT '' COMMENT '姓名'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;
`VARCHAR` 字段会根据实际存储的字符串长度动态调整存储空间;
`CHAR` 字段则会预先分配指定长度的空间,无论实际存储的字符串有多长。
varchar 最大值是多少?

不同字符集的影响



utf8mb4 的 maxlen 为 4,对应的 VARCHAR 最大长度为 16383。两者相乘的结果是 65532。 utf8mb3 的 maxlen 为3,对应的 VARCHAR 最大长度为 21844。两者相乘的结果同样是 65532。 latin1 的 maxlen 为 1,对应的 VARCHAR 最大长度为 65533。两者相乘的结果是 65533。

NULL是否会影响?

列数是否会影响?

列为什么不是 65535 而是 65533 ?


额外信息包括变长字段的长度列表(如 VARCHAR、TEXT、BLOB 字段的长度)和 NULL 值列表(记录哪些列的值是NULL)。如果所有列都是NOT NULL,那么这个列表就不需要。此外,还有5个字节的记录头信息,用于存储一些特殊信息,如行的删除状态、在数据页中的位置等。 真实数据部分则包含行中每一列的实际内容。除了我们明确创建的列外,还有一些隐藏列,如Row_ID(当表没有声明主键时自动生成)和事务相关的字段,如trx_id(记录修改该行的事务ID)和roll_pointer(指向该行上一个版本的指针,用于实现多版本并发控制)。


页大小 16k,怎么保存 65533(64k)的数据?


大于 64k 的字符串怎么处理?
更多精彩内容,关注我们▼▼
文章转载自数据与人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





