
我正在阅读MySQL数据类型的大小.我看到VARCHAR需要额外的1/2字节,MEDIUMTEXT需要额外的3个字节,LONGTEXT需要额外的4个字节.这种MySQL行为的原因是什么?
当MySQL(或任何数据库或计算机语言)存储可变长度字符串时,基本上有两种方法来存储该值:
'0')数据库(差不多?)总是使用长度编码.因此,当您存储'ABC'为可变长度字符串时,在数据库存储中它看起来像:
3 A B C
Run Code Online (Sandbox Code Playgroud)
存储时'A':
1 A
Run Code Online (Sandbox Code Playgroud)
这样,MySQL知道一个字符串何时结束而下一个字符串何时开始.不同类型的不同长度基于字符串的最大长度.因此,1个字节可以保存0到255之间的值.2个字节可以保存0到65,535之间的值,依此类推.
当你使用常规字符表达式时char(3),那么'ABC'看起来像:
A B C
Run Code Online (Sandbox Code Playgroud)
这占用三个字节/无论什么(取决于字符编码).从表元数据中可以知道长度.
有了char(3),字符串'A'也占用三个插槽:
A
---^space here
--------^space here
Run Code Online (Sandbox Code Playgroud)
额外的两个被空格占据.对于长字符串,这通常是一个很大的空间浪费,这就是为什么大多数字符串存储varchar而不是存储char.