【问题标题】:MySQL VARCHAR size limitMySQL VARCHAR 大小限制
【发布时间】:2023-03-08 05:26:01
【问题描述】:

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

Data too long for column 'testname' at row 1

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

【问题讨论】:

  • @Camilo - 假装它,直到你成功!

标签: mysql size varchar


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。好吧,就我而言,我真的不确定传入的数据长度是多少。它可能很长,也可能很小。更准确地说:如果我将列指定为 Varchar(100),则数据可以是 100 个字符,也可以是 50 个字符。只是为了让我的理解清楚。您的意思是它将仅充当 CHAR 数据类型。我的意思是每条记录需要完整的 100 个字节还是只插入 50 个字节。同样在其他 RDBMS 中,如果我没有指定 varchar 限制,甚至在指定限制之后,它确实允许我插入比这更多的字符。在MYSQL中是否可以。
  • 如果您将其设置为 varchar(100) 并且您的行数据是 50 个字符,那么它只会用完其中的一半,它确实 not 充当 char 填充剩余的字节数。
  • varchar 的最大值为 255。如果要存储大量数据,请尝试使用 TEXT 之类的方法,而不是 VARCHAR
  • Varchar 最大为 65,535。字符最大为 255。我也不能使用文本。
  • 我不知道为什么这么复杂。只需将 varchar 设置为您认为不会超过的数量。
【解决方案2】:

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

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

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

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

【讨论】:

  • 嗨詹姆斯,你说的数据是右填充是什么意思?你的意思是即使我在 varchar(15) 列中输入了 10 个字符,这将占用 10 个字符的整个 15 个字节,就像 Char(15) 一样。
【解决方案3】:

来自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 以获取有关如何使用字节的更多信息。

【讨论】:

  • 上面隐含的一个很重要的一点是,如果超过了VARCHAR长度,如果数据库是严格模式,则不会写入该行(会产生错误,但在非-严格模式也会导致警告)。
【解决方案4】:

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

【讨论】:

  • 谢谢。是的。我将使用 UTF-8,所以它需要双字节。
猜你喜欢
  • 2011-10-30
  • 1970-01-01
  • 2011-05-18
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
相关资源
最近更新 更多