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