URL的最佳数据库字段类型

时间:2008-10-20 19:29:05

标签: sql mysql database

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

10 个答案:

答案 0 :(得分:301)

  
      
  1. Lowest common denominator max URL length among popular web browsers: 2,083 (Internet Explorer)

  2.   
  3. 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字节,在所有列之间共享)和使用的字符集的限制。

  4.   
  5. 所以......
      < MySQL 5.0.3使用 TEXT
      或
      > = MySQL 5.0.3使用 VARCHAR(2083)

  6.   

答案 1 :(得分:31)

VARCHAR(512)(或类似的)应该足够了。但是,由于您实际上并不知道相关网址的最大长度,因此我可能会直接转到TEXT。由于CLOBVARCHAR这样的简单字符串数据类型慢得多,因此这种危险当然会导致效率降低。

答案 2 :(得分:16)

SQL Server2005的

varchar(max)

对于MySQL 5.0.3及更高版本

varchar(65535)

这将根据需要分配存储空间,不应影响性能。

答案 3 :(得分:9)

您希望根据使用网址的频率或VARCHAR列之间进行选择,以及实际是否需要长度不受约束

如果出现micahwittman,请将 VARCHAR 与maxlength> = 2,083 一起使用;

  1. 您将在每个查询中使用大量网址(与TEXT列不同,VARCHAR与行内联存储)
  2. 您非常确定网址永远不会超过65,535字节的行限制。
  3. 如果符合以下情况,请使用 TEXT

    1. URL确实可能会破坏65,535字节的行限制
    2. 您的查询不会一次(或经常)选择或更新一堆网址。这是因为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

备注和注意事项

  • 显然,Twitter的方法更好,但是对于我的应用程序的需求,建议使用URL缩短程序就足够了。
  • URL缩短器有其缺点,例如安全问题。就我而言,这不是一个巨大的风险,因为URL不是公开的,也没有大量使用;然而,这显然不适合每个人。 safe.mn似乎阻止了很多垃圾邮件和网络钓鱼URL,但我仍然建议谨慎。
  • 请务必注意,您不应强迫用户使用网址缩短器。对于大多数情况(至少对于我的应用程序的需求而言),500个字符对于大多数用户将使用它来说已经足够了。 仅针对过长链接使用/推荐网址缩短程序。

答案 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