gpt4 book ai didi

mysql - MySQL varchar如何知道多少字节表示长度呢?

转载 作者:可可西里 更新时间:2023-11-01 06:43:46 25 4
gpt4 key购买 nike

MySQL 手册和几个 StackOverflow 答案清楚地表明 varchar 使用:

  • 1 字节 用于其中包含 0-255 个字符的 varchar
  • 2 个字节 用于其中 超过 255 个字符 的 varchars。

第一部分是有道理的。一个字节可以存储 256 个不同的值,即 0 到 255。

我想弄清楚的是 MySQL 如何知道多少字节表示长度

假设一个 255 个字符的 varchar 以以下字节开头:[255][w][o][r][d]~

根据手册,这种场景下只有第一个字节用来表示长度。在读取该字段时,MySQL 将以某种方式必须知道这里是这种情况,并且第二个字节不是长度的一部分。

现在想象一个 256 字符的 varchar,以以下字节开头:[255][1][w][o][r][d]~

现在 MySQL 奇迹般地知道它应该在读取字段时将前 两个字节 解释为长度。

它是如何区分的?我想出的唯一万无一失的方法是只将第一个字节解释为长度,然后确定文本长度是否匹配(在其当前编码中),如果不匹配,我们知道前 两个字节必须是长度。

最佳答案

它发生在定义的时候。对于特定的 VARCHAR 列,所有长度前缀的字节大小相同。 VARCHAR 列将使用 2 个字节或 VARCHAR 列将使用 1 个字节,具体取决于定义的字符大小和字符集。

所有定义为可能需要超过 255 个字节的 VARCHAR 列都使用 2 个字节来存储大小。 MySQL 不会对列中的某些值使用 1 个字节,而对其他值使用 2 个字节。

关于 CHAR and VARCHAR Types 的 MySQL 文档很清楚地说明了这一点(强调我的):

A column uses one length byte if values require no more than 255 bytes, two length bytes if values may require more than 255 bytes.

如果您声明一个 VARCHAR(255) 列使用 utf8 字符集,它仍然会使用 2 个字节作为长度前缀,而不是 1 个字节,因为对于 utf8 字符,以字节为单位的长度可能大于 255。

关于mysql - MySQL varchar如何知道多少字节表示长度呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29516162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com