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


当前回答

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

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

其他回答

您需要根据URL使用的频率以及是否需要解除长度的限制,在TEXT列或VARCHAR列之间进行选择。

使用VARCHAR maxlength >= 2083,如micahwittman建议,如果:

每个查询将使用许多url(与TEXT列不同,varchar与行内联存储) 您可以非常肯定URL永远不会超过65,535字节的行限制。

在以下情况下使用TEXT:

URL可能真的会打破65,535字节的行限制 您的查询不会一次(或经常)选择或更新一堆url。这是因为TEXT列只是内联保存一个指针,检索引用数据所涉及的随机访问可能是痛苦的。

来自SQLServer2005的varchar(max)

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

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

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

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

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

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