MySQL VARCHAR 大小限制

发布于 2024-08-08 18:22:03 字数 268 浏览 4 评论 0原文

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

Data too long for column 'testname' at row 1

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

If I have a column in table with field of type VARCHAR(15) and if I try to insert data of length 16, MySQL gives an error stating

Data too long for column 'testname' at row 1

Does anyone know why VARCHAR fields in MySQL take fixed length? Also how many bytes does a VARCHAR field take per record based on the size given?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

北陌 2024-08-15 18:22:03

来自 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 存储要求,了解有关如何实现的更多信息使用字节。

From the MySQL 5.0 Manual:

Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions. The effective maximum length of a VARCHAR in MySQL 5.0.3 and later is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used.

I only use VARCHAR when I'm certain that the data the column needs to hold will never exceed a certain length, and even then I'm cautious. If I'm storing a text string I tend to use one of the TEXT types.

Check out the MySQL Storage Requirements for more information on how the bytes are used.

冧九 2024-08-15 18:22:03

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

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

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

If you set a column to be varchar(15) the maximum bytes allowed is 15. Thus you can't pass it more than 15 characters without modifying the column to support more than 15. If you store a 4 character string it should only use around 4 bytes out of a possible 15, whereas if you used char(15) it would have filled in the other 11 with empty bytes.

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

( My byte calculation was probably off since it's always -1/+1 or something like that ).

煮茶煮酒煮时光 2024-08-15 18:22:03

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

Small extra local note. The number of bytes used will depend on the encoding scheme in use. 1 byte per character in latin1 encoding, but up to 3 in UTF8. See link in mlambie's answer for details.

止于盛夏 2024-08-15 18:22:03

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

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

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

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

If you look here it should tell you everything about varchar you want to know:
http://dev.mysql.com/doc/refman/5.0/en/char.html

Basically, depending on the length you chose it will use 1 or two bytes to track the length of the current string in that column, so it will store the number of bytes for the data you put in, plus one or two bytes.

So, if you put in 'abc' then it will be 4 or 5 bytes used for that column in that row.

If you used char(15) then even 'abc' would take up 15 bytes, as the data is the right-padded to use up the full 15 bytes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文