2009-10-20 73 views
16

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

Data too long for column 'testname' at row 1 

有谁知道在MySQL为什么VARCHAR领域采取固定长度?根据给定的大小,每个记录还有多少个字节的VARCHAR字段?

+4

@Camilo - 假装它,直到你做到了! – Ben 2013-05-24 05:44:40

回答

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或类似的东西)。

+0

谢谢。 在我的情况下,我真的不确定数据传入的时间长度是多少。它可能很长,也可能很小。更加精确: 如果我将列指定为Varchar(100),那么数据可以是100个字符或可以是50个字符。 只是为了让我的理解清楚。你的意思是它只会作为CHAR数据类型。我的意思是它会为每个记录占用100个字节或仅插入50个字节。同样在其他RDBMS中如果我没有指定varchar限制,或者甚至在指定限制之后,它允许我插入比这更多的字符。 在MYSQL中可能吗? – 2009-10-20 06:31:31

+0

如果你将它设置为'varchar(100)',并且你的行数据是50个字符,那么它只会占用一半,它不会充当填充余下字节的char。 – 2009-10-20 06:42:44

+0

谢谢,但在varchar(100)列中插入超过100个字节是不可能的。 对不起,一次又一次地提出同样的问题。但是我想在将任何大小设置到列前非常确定。 再次感谢。 – 2009-10-20 06:56:56

1

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

基本上取决于长度您选择它会使用1个或两个字节来跟踪当前字符串的长度该列,因此它将存储您输入的数据的字节数加上一个或两个字节。

所以,如果你输入'abc',那么它将在该行中用于该列的4或5个字节。

如果您使用了char(15),那么即使'abc'也会占用15个字节,因为数据是右填充满了15个字节。

+0

嗨James, 你的意思是数据是正确填充的?同样,你的意思是,即使我在varchar(15)列中输入10个字符,这将需要整个15字节的10个字符,如Char(15)将采取。 – 2009-10-20 06:38:56

+0

不,正确的填充是char,不是varchar。 – 2009-10-20 12:18:56

13

MySQL 5.0 Manual

值在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了解有关如何使用字节的更多信息。

3

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

+0

谢谢。 是的。我将使用UTF-8,因此需要双字节。 – 2009-10-20 06:32:28