gpt4 book ai didi

mysql - 为什么不将每个 VARCHAR 都指定为 VARCHAR (65535)?

转载 作者:IT老高 更新时间:2023-10-28 23:44:00 26 4
gpt4 key购买 nike

由于 Varchar 字段的存储要求基于输入的字符串的实际长度,将每个 Varchar 字段指定为最大可能的缺点是什么:Varchar (65535)?那么,除了最大字段 > 255 个字符的 1 个额外字节之外?

[长度为 L 的字符串的存储请求:如果列值需要 0 – 255 个字节,则 L + 1 个字节,如果值可能需要超过 255 个字节,则 L + 2 个字节]

谢谢!

最佳答案

来自 documents - 表列数和行大小限制:

Every table (regardless of storage engine) has a maximum row size of 65,535 bytes. Storage engines may place additional constraints on this limit, reducing the effective maximum row size.

The maximum row size constrains the number (and possibly size) of columns because the total length of all columns cannot exceed this size. For example, utf8 characters require up to three bytes per character, so for a CHAR(255) CHARACTER SET utf8 column, the server must allocate 255 × 3 = 765 bytes per value. Consequently, a table cannot contain more than 65,535 / 765 = 85 such columns.

Storage for variable-length columns includes length bytes, which are assessed against the row size. For example, a VARCHAR(255) CHARACTER SET utf8 column takes two bytes to store the length of the value, so each value can take up to 767 bytes.

因此,定义单个 VARCHAR(65535) 列,实际上将您限制为行上的 单个列(假设您已将其填满)。

除了这么大的大小对于某些类型的数据是完全错误的事实之外,所有这些 - 如果您有一个可能包含本地和国际号码的电话号码列,您可以选择使用 VARCHAR 字段这样做,但将其设置为超过 20 可能毫无意义(我很慷慨)。

this answer来自 Bill Karwin,这也表明如果使用不必要的长 VARCHAR 字段生成临时表(与将这些字段转换为 CHAR 并再次返回有关),则可能会降低性能 - 请参阅帖子详情)。

关于mysql - 为什么不将每个 VARCHAR 都指定为 VARCHAR (65535)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7653007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com