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