当前位置:  开发笔记 > 后端 > 正文

URL的最佳数据库字段类型

如何解决《URL的最佳数据库字段类型》经验,为你挑选了6个好方法。

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



1> micahwittman..:

    流行的Web浏览器中最低公分母最大URL长度: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字节,在所有列之间共享)和使用的字符集的限制.

    所以...
    TEXT

    > = MySQL 5.0.3使用VARCHAR(2083)


这个答案有点误导.请注意,"最低公分母"在这里毫无意义,您希望使用浏览器或服务器将接受的*最高*数字(这是不一致且可能会更改).正如您的链接所说:"*...... HTTP协议的规范没有指定任何最大长度...*",所以不要打扰`VARCHAR(2083)`,只需使用`TEXT`.
很好的答案,但我会限制长度.根据项目,您可能希望限制接受的URL.谁使用网址超过200?
例如,也来自您的链接:"*在65,536个字符之后,位置栏不再显示Windows Firefox 1.5.x中的URL.但是,更长的URL将起作用.我在100,000个字符后停止测试.*"
他们最好提出一个"理解"uri结构的uri数据类型,以便有效地完成索引和搜索,就像oracle一样......等等,mysql现在是oracle的...... http://download.oracle. COM /文档/ CD/B10464_05/web.904/b12099/adx06uri.htm

2> Daniel Spiew..:

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



3> Bob Probst..:

varchar(max) 对于SQLServer2005

varchar(65535) 对于MySQL 5.0.3及更高版本

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


在MySQL中,除非是表中唯一的列,否则很可能无法获得大的varchar.

4> mrgrieves..:

您需要根据URL的使用频率以及是否确实需要将长度保持为未绑定来在TEXT或VARCHAR列之间进行选择.

使用VARCHAR,maxlength> = 2,083,如micahwittman建议的那样:

    您将在每个查询中使用大量URL(与TEXT列不同,VARCHAR与行内联存储)

    您非常确定URL永远不会超过65,535字节的行限制.

使用TEXT如果:

    URL确实可能会破坏65,535字节的行限制

    您的查询不会一次(或经常)选择或更新一堆URL.这是因为TEXT列只是内联指针,并且检索引用数据所涉及的随机访问可能很痛苦.



5> 小智..:

您应该使用带有ASCII字符编码的VARCHAR.URL是编码百分比,国际域名使用punycode,因此ASCII足以存储它们.这将比UTF8使用更少的空间.

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


UTF-8是否只使用更多空间?

6> CullenJ..:

这实际上取决于您的用例(请参阅下文),但是存储TEXT会带来性能问题,并且VARCHAR在大多数情况下听起来像是过大的杀伤力。

我的方法:使用较大但不合理的VARCHAR长度(例如,VARCHAR(500)大约),并鼓励需要较大URL的用户使用URL缩短器(例如)safe.mn

Twitter的方法:对于非常好的UX,为长度过长的URL提供一个自动URL缩短器,并将链接的“显示版本”存储为URL的片段,并在其末尾带有省略号。(示例:http://stackoverflow.com/q/219569/1235702将显示为stackoverflow.com/q/21956...,并将链接到缩短的URL http://ex.ampl/e1234

注意事项和警告

显然,Twitter方法更好,但是对于我的应用程序的需求,建议使用URL缩短程序就足够了。

URL缩短器有其缺点,例如安全性问题。就我而言,这不是很大的风险,因为该URL不是公开的也不被大量使用。但是,这显然不适用于所有人。safe.mn似乎阻止了很多垃圾邮件和网络钓鱼URL,但我仍然建议您谨慎使用。

请务必注意,您不应强迫用户使用URL缩短器。在大多数情况下(至少满足我的应用程序的需求),对于大多数用户将要使用的字符来说,500个字符已经足够了。仅对超长链接使用/推荐URL缩短器。


如果要提供内置的URL缩短器,是否还需要将全长URL存储在某个数据库中才能正常工作?:-)
推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有