【发布时间】:2012-10-02 21:48:41
【问题描述】:
在我的 MySQL 数据库中,我有一个如下定义的表:
CREATE TABLE `mytablex_cs` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`tag` varchar(6) COLLATE utf8_bin NOT NULL DEFAULT '',
`value` text COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`),
KEY `kt` (`tag`),
KEY `kv` (`value`(200))
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
我需要在value 字段上实现唯一约束(键)。
我知道目前还不可能为 blob 或 text 字段的整个值定义唯一索引,但是有一个票(?)可以实现这样的功能(请参阅this page),其中建议使用散列创建唯一键,就像其他字段已经实现的那样。
现在我想使用类似的方法向表中添加另一个包含哈希的字段并在该字段上创建唯一键。
我查看了创建此哈希的可能方法,并且由于我想避免冲突(我需要插入数百万个条目),因此 RIPEMD-160 算法似乎是最好的算法,即使一个快速搜索给了我几个使用 SHA256 甚至 SHA1 和 MD5 的类似解决方案。
我完全缺乏密码学知识,那么选择这种方法的缺点是什么?
我的另一个问题是:MySQL 当前使用哪种算法来创建哈希?
【问题讨论】:
标签: mysql cryptography md5 sha256 unique-key