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

时间:2011-10-01 11:10:03

标签: mysql text varchar

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


我还有另一个相关问题:

我在表格中有一些字段,我希望能够存储很多字符(大约10'000)。但实际上,几乎所有时间都不会超过10个字符。

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

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

提前感谢您的回答。

修改

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

2 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:7)

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

明确提到

Here

  

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