我需要在MySQL表中存储一个url。定义一个包含长度不确定的URL的字段的最佳做法是什么?
答案 0 :(得分:301)
Lowest common denominator max URL length among popular web browsers: 2,083 (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)
答案 1 :(得分:31)
VARCHAR(512)
(或类似的)应该足够了。但是,由于您实际上并不知道相关网址的最大长度,因此我可能会直接转到TEXT
。由于CLOB
比VARCHAR
这样的简单字符串数据类型慢得多,因此这种危险当然会导致效率降低。
答案 2 :(得分:16)
varchar(max)
varchar(65535)
这将根据需要分配存储空间,不应影响性能。
答案 3 :(得分:9)
您希望根据使用网址的频率在
如果出现micahwittman,请将 VARCHAR 与maxlength> = 2,083 一起使用;
如果符合以下情况,请使用 TEXT
答案 4 :(得分:9)
您应该使用带有ASCII字符编码的VARCHAR。 URL是编码百分比,国际域名使用punycode,因此ASCII足以存储它们。这将比UTF8使用更少的空间。
VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL
答案 5 :(得分:4)
大多数浏览器都会让你放very large amounts of data in a URL,因此很多东西最终都会创建非常大的网址,所以如果你谈论的不仅仅是网址的某个部分,你需要使用TEXT列,因为VARCHAR/CHAR are limited
答案 6 :(得分:4)
这实际上取决于您的使用案例(见下文),但存储为TEXT
会导致性能问题,而且大多数VARCHAR
听起来有点过分。
我的方法:使用慷慨但不合理的大VARCHAR
长度,例如VARCHAR(500)
左右,并鼓励需要更大网址的用户使用URL缩短器,例如safe.mn
。
Twitter方法:对于一个非常好的用户体验,为过长的URL提供自动URL缩短器,并将链接的“显示版本”存储为URL的片段,其中包含省略号。结束。 (示例:http://stackoverflow.com/q/219569/1235702
将显示为stackoverflow.com/q/21956...
,并会链接到缩短的网址http://ex.ampl/e1234
)
备注和注意事项
答案 7 :(得分:3)
我不了解其他浏览器,但IE7 has a 2083 character limit for HTTP GET operations。除非任何其他浏览器有更低的限制,否则我不明白为什么你需要更多的字符而不是2083。
答案 8 :(得分:1)
大多数Web服务器都有URL长度限制(这就是为什么“URI太长”的错误代码),这意味着有一个实际的大小。找到最流行的Web服务器的默认长度限制,并使用它们中的最大值作为字段的最大大小;它应该绰绰有余。
答案 9 :(得分:1)
您最好使用varchar(max)(大小方面)表示varchar (65535)
。
这甚至可以存储您更大的网址,也可以节省您的空间。
max说明符扩展了varchar的存储能力, nvarchar和varbinary数据类型。 varchar(max),nvarchar(max)和 varbinary(max)统称为大值数据类型。您可以 使用大值数据类型来存储最多2 ^ 31-1个字节的数据。
在TechNet上查看有关使用大值数据类型的this article