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


当前回答

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

其他回答

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

您应该使用带有ASCII字符编码的VARCHAR。url是百分比编码,国际域名使用punycode,所以ASCII就足够存储它们了。这将比UTF8占用更少的空间。

VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL

在流行的网页浏览器中,最低公分母最大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)

我不知道其他浏览器的情况,但IE7对HTTP GET操作有2083个字符的限制。除非其他浏览器有更低的限制,否则我不明白为什么你需要超过2083个字符。

来自SQLServer2005的varchar(max)

varchar(65535)用于MySQL 5.0.3及以后版本

这将根据需要分配存储,并且不会影响性能。