【问题标题】:Why if I create a varchar(65535), I get a mediumtext?为什么如果我创建一个 varchar(65535),我会得到一个中文本?
【发布时间】:2023-03-18 00:05:01
【问题描述】:

mediumtext 和 varchar(65535) 是一回事吗? 我的意思是他们都直接将数据存储在表中还是 mediumtext 类型存储指针? 我问这个是因为如果我尝试创建一个 varchar(65535) 它会自动转换为中等文本(如果长度实际上大于 21811)。


我还有一个相关的问题是:

我在表中有一些字段,我希望能够存储大量字符(大约 10'000)。但实际上,它几乎总是存储不超过 10 个字符。

所以我的问题是,我是否需要使用 text 或 varchar(10000) 类型才能获得最佳性能?

我认为 varchar 类型更适合这种情况。

提前感谢您的回答。

编辑

我不明白的是为什么他们说从 mysql 5.0.3 开始,我们可以创建一个 varchar(65535),但是当我们尝试这样做时,它会将其转换为中文本。对我来说,varchar 和 text(mediumtext include)之间的区别在于它们的存储方式(使用或不使用指针)。 那么为什么他们说如果我们不能创建长度为 65535 的 varchar 呢?

【问题讨论】:

标签: mysql text varchar


【解决方案1】:

我正在回答我自己的问题:

那是因为我使用的是多字节字符。如果您使用 utf-8 排序规则,您将无法创建超过 21000 个字符的 varchar。但是如果你使用 ascii,你会的。

【讨论】:

  • 啊哈!这是有道理的,将以字节为单位的行限制除以三。谢谢。 (只需确保您的 UTF-8 字符串仅包含 UCS-2 字符 ;-) ...哇,MySQL 5.5 及更高版本也已考虑到这一点,请参阅 dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
  • 注意一个细节:65535 限制不仅仅是 Varchar 限制。这是整个记录大小的限制。这意味着如果表中只有一个 Varchar,则最多可以达到 (65535-3)/3 = 21844 个字符。但实际上您将无法达到 21844,因为其他字段也使用了可用的 65535 字节的一部分。
【解决方案2】:

根据 mysql.com,mediumtext 的长度是 L + 3 个字节。对我来说,这意味着如果您有一个空字段,它将是 3 个字节。如果您有一个空的 varchar,则该字段的长度将为 1 个字节。

Here明确提及

在 MySQL 5.0.3 之前,具有长度规范的 VARCHAR 列 大于 255 被转换为可以容纳的最小 TEXT 类型 给定长度的值。例如,VARCHAR(500) 转换为 TEXT 和 VARCHAR(200000) 被转换为 MEDIUMTEXT。然而,这 转换会影响尾随空格的移除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多