我正在使用PostgreSQL。
我需要将“http://www.xyz.com/some_uri/index1.html”转换为“scdfdsffd”(某些唯一键,基于表中唯一键的URL)。< / p>
换句话说...... URL是表中的唯一键,但我需要根据URL生成一个小的唯一键。
标准PostgreSQL 8.4怎么办?
最诚挚的问候,
答案 0 :(得分:4)
有几种方法:
a)为什么不使用自动递增列或序列生成器为每个插入生成唯一的整数?如果您的网址少于1亿,则您的标识符很短且易于记忆。但是,如果这不是一个选项(例如,因为您不希望人们猜测ID并以这种方式攻击数据库):
b)内置的MD5()函数可能会有所帮助:
INSERT INTO table (pkey, url) VALUES (MD5('http://...'), 'http://...');
MD5()是一个哈希函数,很可能会为每个URL提供一个唯一的标识符。我说“最有可能”,因为你从MD5获得了128位散列,并且散列冲突的可能性大约为2 ^ -128(大约10 ^ -55)。
如果您需要较小的标识符,可以将结果从MD5下调到较少的字符数,但根据您所使用的字符,可能会显着增加哈希冲突的可能性。
[注意:时间戳答案已经过修改,因为它无法解决原始问题。 -BobG]