【问题标题】:Why some MySQL data type require some extra bytes?为什么某些 MySQL 数据类型需要一些额外的字节?
【发布时间】:2014-03-01 13:50:13
【问题描述】:

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

【问题讨论】:

  • 这个问题似乎是题外话,因为这在别处有所涉及

标签: mysql size


【解决方案1】:

当 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

【讨论】:

  • 感谢您的回答,但为什么 VARCHAR 有时需要 1 个字节,有时需要 2 个字节,为什么 CHAR 不需要额外的字节?
  • @VarunAgw 。 . .阅读最后一段,了解为什么varchar 有时使用一个字节,有时使用 2。char 不需要额外的字节,因为长度是已知的:字符串中的字符数存储在数据库中,长度为从表格的格式知道。
猜你喜欢
  • 2015-08-11
  • 1970-01-01
  • 2013-03-24
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多