我需要在MySQL表中存储一个url。定义包含不确定长度的URL的字段的最佳实践是什么?
当前回答
我不知道其他浏览器的情况,但IE7对HTTP GET操作有2083个字符的限制。除非其他浏览器有更低的限制,否则我不明白为什么你需要超过2083个字符。
其他回答
在流行的网页浏览器中,最低公分母最大URL长度:2083 (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)
您最好使用varchar(max),这(就大小而言)意味着varchar(65535)。 这甚至可以存储你更大的网址,也会节省你的空间。
max说明符扩展了varchar的存储能力, Nvarchar和varbinary数据类型。Varchar (max), nvarchar(max),和 Varbinary (max)统称为大值数据类型。你可以 使用大值数据类型存储最多2^31-1字节的数据。
请参阅TechNet上关于使用大值数据类型的文章
来自SQLServer2005的varchar(max)
varchar(65535)用于MySQL 5.0.3及以后版本
这将根据需要分配存储,并且不会影响性能。
VARCHAR(512)(或类似)应该足够了。然而,由于您并不真正知道所讨论的url的最大长度,我可能只是直接进入TEXT。这样做的危险当然是效率的损失,因为clob比VARCHAR这样的简单字符串数据类型慢得多。
您需要根据URL使用的频率以及是否需要解除长度的限制,在TEXT列或VARCHAR列之间进行选择。
使用VARCHAR maxlength >= 2083,如micahwittman建议,如果:
每个查询将使用许多url(与TEXT列不同,varchar与行内联存储) 您可以非常肯定URL永远不会超过65,535字节的行限制。
在以下情况下使用TEXT:
URL可能真的会打破65,535字节的行限制 您的查询不会一次(或经常)选择或更新一堆url。这是因为TEXT列只是内联保存一个指针,检索引用数据所涉及的随机访问可能是痛苦的。
推荐文章
- 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与更新之间的差异
- 向现有表添加主键