我需要在MySQL表中存储一个url。定义包含不确定长度的URL的字段的最佳实践是什么?
当前回答
这实际上取决于您的用例(见下文),但存储为TEXT会有性能问题,而且对于大多数情况来说,巨大的VARCHAR听起来有点过头了。
我的方法是:使用一个慷慨的,但不是不合理的大VARCHAR长度,如VARCHAR(500)左右,并鼓励需要更大URL的用户使用URL缩短器,如safe.mn。
Twitter方法:为了获得非常好的用户体验,为过长的URL提供一个自动URL缩短器,并将链接的“显示版本”存储为URL片段,在末尾使用省略号。(例如:http://stackoverflow.com/q/219569/1235702将显示为stackoverflow.com/q/21956…并将链接到一个缩短的URL http://ex.ampl/e1234)
注意事项
Obviously, the Twitter approach is nicer, but for my app's needs, recommending a URL shortener was sufficient. URL shorteners have their drawbacks, such as security concerns. In my case, it's not a huge risk because the URL's are not public and not heavily used; however, this obviously won't work for everyone. safe.mn appears to block a lot of spam and phishing URL's, but I would still recommend caution. Be sure to note that you shouldn't force your users to use a URL shortener. For most cases (at least for my app's needs), 500 characters is overly sufficient for what most users will be using it for. Only use/recommend a URL shortener for overly-long links.
其他回答
VARCHAR(512)(或类似)应该足够了。然而,由于您并不真正知道所讨论的url的最大长度,我可能只是直接进入TEXT。这样做的危险当然是效率的损失,因为clob比VARCHAR这样的简单字符串数据类型慢得多。
来自SQLServer2005的varchar(max)
varchar(65535)用于MySQL 5.0.3及以后版本
这将根据需要分配存储,并且不会影响性能。
下面是一些基于AWS的SQL数据类型。
大多数浏览器都允许你在URL中放入大量数据,因此很多东西最终会创建非常大的URL,所以如果你谈论的是URL的域名部分以外的任何东西,你将需要使用TEXT列,因为VARCHAR/CHAR是有限的。
我不知道其他浏览器的情况,但IE7对HTTP GET操作有2083个字符的限制。除非其他浏览器有更低的限制,否则我不明白为什么你需要超过2083个字符。
推荐文章
- django test app error -在创建测试数据库时出现错误:创建数据库的权限被拒绝
- MySql: Tinyint (2) vs Tinyint(1) -有什么不同?
- 在Android SQLite中处理日期的最佳方法
- 如何在MySQL表中移动列?
- 在MySQL中选择最后一行
- 如何删除MySQL root密码
- 在SQL Server中查找重复的行
- 从DateTime中提取小时(SQL Server 2005)
- LEFT OUTER JOIN如何返回比左表中存在的记录更多的记录?
- 如何用SQL语句计算百分比
- Postgres唯一约束与索引
- SQL Server动态PIVOT查询?
- MySQL对重复键更新在一个查询中插入多行
- 使用{merge: true}设置的Firestore与更新之间的差异
- 向现有表添加主键