18

如果我在表中有一个字段类型为字段的列,VARCHAR(15)并且我尝试插入长度为 16 的数据,MySQL 会给出错误说明

Data too long for column 'testname' at row 1

有谁知道为什么 MySQL 中的 VARCHAR 字段采用固定长度?另外,根据给定的大小,VARCHAR 字段每条记录占用多少字节?

4

4 回答 4

14

MySQL 5.0 手册

VARCHAR 列中的值是可变长度字符串。在 MySQL 5.0.3 之前,长度可以指定为 0 到 255 之间的值,在 5.0.3 和更高版本中可以指定为 0 到 65,535 之间的值。MySQL 5.0.3 及更高版本中 VARCHAR 的有效最大长度取决于最大行大小(65,535 字节,在所有列之间共享)和使用的字符集。

当我确定列需要保存的数据永远不会超过一定长度时,我只使用 VARCHAR,即使这样我也很谨慎。如果我要存储文本字符串,我倾向于使用其中一种 TEXT 类型。

查看MySQL 存储要求以获取有关如何使用字节的更多信息。

于 2009-10-20T06:04:36.230 回答
13

如果将列设置为varchar(15)允许的最大字节数为 15。因此,如果不修改列以支持超过 15 个字符,则不能将其传递超过 15 个字符。如果存储 4 个字符串,它应该只使用大约 4 个字节可能的 15 个,而如果您使用char(15)它,它将用空字节填充其他 11 个。

http://dev.mysql.com/doc/refman/5.0/en/char.html

(我的字节计算可能是关闭的,因为它总是 -1/+1 或类似的东西)。

于 2009-10-20T05:56:10.243 回答
3

小的额外的本地注释。使用的字节数取决于使用的编码方案。latin1 编码中每个字符 1 个字节,但 UTF8 中最多 3 个。有关详细信息,请参阅 mlambie 答案中的链接。

于 2009-10-20T06:06:39.130 回答
1

如果你看这里,它应该告诉你关于 varchar 你想知道的一切:http: //dev.mysql.com/doc/refman/5.0/en/char.html

基本上,根据您选择的长度,它将使用 1 或 2 个字节来跟踪该列中当前字符串的长度,因此它将存储您输入的数据的字节数,再加上 1 或 2 个字节。

因此,如果您输入“abc”,那么该行中的该列将使用 4 或 5 个字节。

如果你使用char(15),那么即使是 'abc' 也会占用 15 个字节,因为数据是右填充的,以使用完整的 15 个字节。

于 2009-10-20T06:03:11.910 回答