我需要在MySQL表中存储一个url。定义包含不确定长度的URL的字段的最佳实践是什么?


当前回答

大多数web服务器都有URL长度限制(这就是为什么会有“URI过长”的错误代码),这意味着有一个实际的上限大小。找到最流行的web服务器的默认长度限制,并使用它们中最大的作为字段的最大大小;这应该绰绰有余。

其他回答

VARCHAR(512)(或类似)应该足够了。然而,由于您并不真正知道所讨论的url的最大长度,我可能只是直接进入TEXT。这样做的危险当然是效率的损失,因为clob比VARCHAR这样的简单字符串数据类型慢得多。

大多数浏览器都允许你在URL中放入大量数据,因此很多东西最终会创建非常大的URL,所以如果你谈论的是URL的域名部分以外的任何东西,你将需要使用TEXT列,因为VARCHAR/CHAR是有限的。

在流行的网页浏览器中,最低公分母最大URL长度:2083 (Internet Explorer)

http://dev.mysql.com/doc/refman/5.0/en/char.html VARCHAR列中的值是可变长度的字符串。长度在MySQL 5.0.3之前可以指定为0到255,在5.0.3及更高版本中可以指定为0到65,535。在MySQL 5.0.3及以后版本中,VARCHAR的有效最大长度取决于最大行大小(65,535字节,在所有列之间共享)和所使用的字符集。

所以… < MySQL 5.0.3使用TEXT 或 >= MySQL 5.0.3使用VARCHAR(2083)

大多数web服务器都有URL长度限制(这就是为什么会有“URI过长”的错误代码),这意味着有一个实际的上限大小。找到最流行的web服务器的默认长度限制,并使用它们中最大的作为字段的最大大小;这应该绰绰有余。

您最好使用varchar(max),这(就大小而言)意味着varchar(65535)。 这甚至可以存储你更大的网址,也会节省你的空间。

max说明符扩展了varchar的存储能力, Nvarchar和varbinary数据类型。Varchar (max), nvarchar(max),和 Varbinary (max)统称为大值数据类型。你可以 使用大值数据类型存储最多2^31-1字节的数据。

请参阅TechNet上关于使用大值数据类型的文章