什么是URL最佳的列类型?

55

什么是适合SQL Server中URL字段的最佳列类型?

类型:VARCHAR还是NVARCHAR?

长度

类似于MySQL的问题

4个回答

59

如果您准备在存储URL之前始终对其进行URL编码(谷歌举了一个例子,中.doc URL编码为%E4%B8%AD.doc),那么使用varchar是安全的。如果您希望数据库中的非ASCII字符保持可读性,则建议使用nvarchar。如果您不想被抓住,那么使用nvarchar是更好的选择。

由于IE(主流浏览器中最受限制的浏览器)不支持超过2083个字符的URL(除了您可能需要考虑索引或行长度外),则nvarchar(2083)可以满足大多数有用的场景。


2
2083是IE支持的最大值,这是主流浏览器中最为严格的限制之一。但他们并没有明确说明这是URL编码前还是后的限制... - David M
1
那么,你建议使用什么长度? - Adrian Godong
在SQL Server中,大的nvarchar或varchar列可能会导致索引和行大小问题。这取决于很多因素——你要实现什么,表中还有什么。很难给出一个适用于所有情况的答案。 - David M
如果您想尽量确保万无一失,那么请使用nvarchar(2083),而不要进行URL编码。 - David M
仅使用varchar(max) / nvarchar(max)有什么缺点吗? - Aki
1
使用max的缺点是“掩盖了潜在问题”。这可能会给用户带来问题,但不会在任何错误日志中显示。限制到2083将有助于您捕获和诊断超出浏览器限制的URL的原因或来源。 - jaybro

10

如果您将存储多语言URL,那么,请使用nvarchar,否则请使用varchar

编辑:关于长度,因为IE将URL限制在2,083个字符内,您可以将其作为字段的最大长度。 在这种情况下,您应该使用较低的通用分母,因为您的URL应该在所有浏览器中可用。 实际上,这是对一个字段的实际限制,而该字段很可能永远不会包含任何接近甚至达到IE限制的数据。


其中一个用途是用于OpenID URL,因此它将对任何有效的URL开放。 - Adrian Godong
1
HTTP 的 RFC 没有 URL 的最大长度限制。微软在 http://support.microsoft.com/kb/q208427/ 上的 MSDN KB 表示,最大长度为 2083(至少适用于所有 IE 版本直到 IE8;没有关于 IE8 的最大长度的说明)。对于其他浏览器,请参阅 http://www.boutell.com/newfaq/misc/urllength.html,虽然该信息已过时(不包括 Firefox 2 或 3),但应表明浏览器中未使用标准长度。 - Chris J

4

对于这种情况,我总是倾向于谨慎起见并使用nvarchar。


取决于URL存储的内容。如果我只使用它来指向其他网站,通常会将其设为300个字符。如果我要将其用作深入到网站或文件链接的指针,我通常会选择2000个字符。我从未遇到过URL超过这么多字符(甚至接近),但是我总是谨慎处理。现在,驱动器空间非常便宜,我不再像以前那样担心空间限制。 - BBlake

2

对于SQL Server,我认为您需要使用NVARCHAR,因为计划(如果还没有实施)中将在URL中使用非罗马字符。如今,我无法看到NVARCHAR相对于VARCHAR的额外存储要求会带来任何问题。


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