我读到 URL 的最大长度可以是 2,000 个字符。因此,我有一个带有 varchar(2000) 列类型的表来存储 URL。但此列不能只索引前 1000 个字符,如下所示。 URL 的推荐数据类型是什么?
mysql> create table myweb(id int not null auto_increment, url varchar(2000), primary key (id));
Query OK, 0 rows affected (0.03 sec)
mysql> alter table myweb add key (url);
Query OK, 1 row affected, 1 warning (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> show create table myweb\G
*************************** 1. row ***************************
Table: myweb
Create Table: CREATE TABLE `myweb` (
`id` int(11) NOT NULL auto_increment,
`url` varchar(2000) default NULL,
PRIMARY KEY (`id`),
KEY `url` (`url`(1000))
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
你的问题留下了很多想象空间。
一方面,我们必须假设您的索引的目的是作为主键以避免重复。您开发的应用程序不会对用户说:“抱歉,您的 1800 个字符的数据输入有误;不匹配,请重试。”
另一方面,我们必须假设您的这些 URL 中可能包含大量 CGI 参数 (?param=val¶m=val¶m=val)。
如果这些假设成立,那么您可以执行以下操作。
让你的 URL 列更长,作为 varchar,
如果你需要。
添加 SHA-1 哈希值
列到您的表中。 SHA-1 哈希值
由 40 个字符的字符串组成
(十六进制数字)。
将该专栏设为您的
首要的关键。
当你把东西放进去时
您的表,使用 mySQL SHA1
函数来计算哈希值。
使用 INSERT ... ON DUPLICATE KEY UPDATE mySQL 命令将行添加到数据库中。
这将使您能够以良好扩展的方式将重复的 URL 保留在数据库之外,而不会造成混淆。
http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)