如何将varchar设置为无限长度?

45
在MySQL数据库中,我该如何将一个varchar设置为无限长度,以便存储长网页?如果不行的话,那么最大长度是多少?
我知道可以使用Text类型来存储更长的字符串。在使用text数据类型时是否有任何限制需要处理?

2
请使用 text 类型,而不是其他类型。 - M Khalid Junaid
1
varchar(max)是另一个选项。总是有一个限制。 - Sully
请阅读http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html。 - Sully
5个回答

82
在MySQL 5.0.3之前,VARCHAR可以存储最多255个字符,在5.0.3及以后的版本中可以存储65,535个字符。
为了在MySQL数据库中存储大量数据,您可以使用TEXTMEDIUMTEXTLONGTEXT数据类型:
TEXT can store 65,535 characters (approx 64KB)
MEDIUMTEXT = 16,777,215 characters (approx 16 MB) 
LONGTEXT = 4,294,967,295 chars (approx 4GB)

根据mysql文档,一个TEXT看起来是2^16 - 2字节,即字符数为64 KiB - 2字节或65,536 - 2字节。我建议在mysql文档中查找更清晰/详细的规格说明。 - user3773048

6

您可以尝试使用varchar(max)


2
截至今天,MySQL中没有VARCHAR(MAX)。 - Guido Spadavecchia

4

1

为了回答他问题的另一部分...

有哪些限制我需要处理?

根据软件版本、数据存储引擎等,可能会出现各种意想不到的限制。

我遇到过这些问题。

ALTER TABLE reportserver.report ADD reportquery varchar(65535)

错误代码:1074。列长度对于列“reportquery”太大(最大值=21845);请改用BLOB或TEXT。
ALTER TABLE reportserver.report ADD reportquery varchar(21845)

错误代码:1118。行大小过大。使用的表类型的最大行大小(不包括BLOB)为65535。这包括存储开销,请查看手册。您必须将某些列更改为TEXT或BLOB。
您可能会在设置表时遇到这些问题,但与其冒险无法添加更多列,或无法使列变宽,不如直接选择TEXT路线,特别是对于非常宽的列。

-5

3
这个错误的答案:我认为你不应该看到他提到mysqltag,因为在oracle中,varchar2的类型是唯一的。 - jmail
1
看起来最新的mySql已经像varchar2一样运作了。所以干杯! :) - Amrit Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接