在 MySQL 文档中可以发现 CHAR 数据类型没有字符串长度的前置字节。
相反,VARCHAR 数据类型有 1 或 2 个前面的字节,用于存储字符串长度。这是可以理解的。数据库引擎需要知道字符串长度才能读取它。
数据库引擎如何知道 CHAR 数据类型长度是多少?其背后的逻辑/算法是什么?
https://dev.mysql.com/doc/refman/8.0/en/char.html说:
CHAR 列的长度固定为您在创建表时声明的长度。长度可以是 0 到 255 之间的任意值。存储 CHAR 值时,会在右侧用空格填充到指定的长度。
因此,无需注释每行中的值,因为它始终与为列定义的长度完全相同。无论有多少行属于该表,长度都会在表元数据中存储一次。
而 VARCHAR 在每行上存储为可变长度的字节数,最多可达为列定义的最大值。
在 C 中,他们可能使用以 null 结尾的字符串而不是长度前缀。但在 SQL 中,null 是存储在字符串中的合法字符,因此它不是一个好的字符串终止符。