为什么有些MySQL数据类型需要一些额外的字节?

时间:2014-03-01 13:50:14

标签: mysql size

enter image description here

我正在阅读有关MySQL数据类型大小的内容。我看到VARCHAR需要额外的1/2字节,MEDIUMTEXT需要额外的3个字节,LONGTEXT需要额外的4个字节。这种MySQL行为的原因是什么?

1 个答案:

答案 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的原因。