为什么我创建一个varchar(65535),我得到一个中等文本?

Nic*_*DIA 16 mysql varchar text

中间文本和varchar(65535)是否相同?我在这里的意思是他们是将数据直接存储在表中还是mediatext类型存储指针?我问这个是因为如果我尝试创建一个varchar(65535),它会自动转换为中间文本(如果长度实际上大于21811).


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

我在桌子上有一些字段,我希望能够存储很多字符(大约10'000).但实际上,它几乎总是存储不超过10个字符.

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

我相信varchar类型更适合这种情况.

提前感谢您的回答.

编辑

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

Nic*_*DIA 13

我在回答我自己的问题:

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

  • 请注意一个细节:65535 限制不仅仅是 Varchar 限制。这是整个记录大小的限制。这意味着如果表中只有一个 Varchar,则最多可以达到 (65535-3)/3 = 21844 个字符。但实际上,您将无法达到 21844,因为其他字段也使用可用的 65535 字节的一部分。 (2认同)

diE*_*cho 7

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

这里有明确提到

在MySQL 5.0.3之前,长度规格大于255的VARCHAR列将转换为可以保存给定长度值的最小TEXT类型.例如,VARCHAR(500)转换为TEXT,VARCHAR(200000)转换为MEDIUMTEXT.但是,此转换会影响拖尾空间的移除.