我和PostgreSQL一起工作。
我需要将"http://www.xyz.com/some_uri/index1.html“转换为类似于”scdfdsffd“的形式(一些唯一键,基于表中的唯一键)。
换句话说..。URL是表中的唯一键,但我需要基于URL生成一个较小的唯一键。
我可以用标准的PostgreSQL 8.4做什么?
诚挚的问候,
发布于 2011-04-21 05:41:15
以下是几种方法:
a)为什么不使用自动递增的列或序列生成器来为每次插入生成唯一的整数?如果您的URL少于1亿个,则您的标识符很短且易于记忆。然而,如果这不是一种选择(例如,因为你不想让人们猜测if并以这种方式攻击数据库):
b)内置的MD5()函数可能会有所帮助:
INSERT INTO table (pkey, url) VALUES (MD5('http://...'), 'http://...');
MD5()是一个散列函数,很可能会为每个URL提供一个惟一的标识符。我说“最有可能”是因为你从MD5得到了一个128位的散列,而散列冲突的可能性大约是2^-128 (大约10^-55)。
如果您需要较小的标识符,可以将MD5的结果减少到较少的字符数,但根据您使用的字符,可能会显著增加哈希冲突的可能性。
注:时间戳答案已编辑,因为它不能以任何方式解决原始问题。-BobG
https://stackoverflow.com/questions/5736815
复制相似问题