如果我在表中有一个字段类型为字段的列,VARCHAR(15)
并且我尝试插入长度为 16 的数据,MySQL 会给出错误说明
Data too long for column 'testname' at row 1
有谁知道为什么 MySQL 中的 VARCHAR 字段采用固定长度?另外,根据给定的大小,VARCHAR 字段每条记录占用多少字节?
VARCHAR 列中的值是可变长度字符串。在 MySQL 5.0.3 之前,长度可以指定为 0 到 255 之间的值,在 5.0.3 和更高版本中可以指定为 0 到 65,535 之间的值。MySQL 5.0.3 及更高版本中 VARCHAR 的有效最大长度取决于最大行大小(65,535 字节,在所有列之间共享)和使用的字符集。
当我确定列需要保存的数据永远不会超过一定长度时,我只使用 VARCHAR,即使这样我也很谨慎。如果我要存储文本字符串,我倾向于使用其中一种 TEXT 类型。
查看MySQL 存储要求以获取有关如何使用字节的更多信息。
如果将列设置为varchar(15)
允许的最大字节数为 15。因此,如果不修改列以支持超过 15 个字符,则不能将其传递超过 15 个字符。如果存储 4 个字符串,它应该只使用大约 4 个字节可能的 15 个,而如果您使用char(15)
它,它将用空字节填充其他 11 个。
http://dev.mysql.com/doc/refman/5.0/en/char.html
(我的字节计算可能是关闭的,因为它总是 -1/+1 或类似的东西)。
小的额外的本地注释。使用的字节数取决于使用的编码方案。latin1 编码中每个字符 1 个字节,但 UTF8 中最多 3 个。有关详细信息,请参阅 mlambie 答案中的链接。
如果你看这里,它应该告诉你关于 varchar 你想知道的一切:http: //dev.mysql.com/doc/refman/5.0/en/char.html
基本上,根据您选择的长度,它将使用 1 或 2 个字节来跟踪该列中当前字符串的长度,因此它将存储您输入的数据的字节数,再加上 1 或 2 个字节。
因此,如果您输入“abc”,那么该行中的该列将使用 4 或 5 个字节。
如果你使用char(15)
,那么即使是 'abc' 也会占用 15 个字节,因为数据是右填充的,以使用完整的 15 个字节。