0

我正在建立一个网站。用户可以提交“标题”,它是一串 unicode 字符(不仅仅是英文)。

当用户提交“标题”时,我想看看它是否已经在数据库(MySQL)中。如果是,我只会更新现有记录。如果它是一个新的“标题”,我会为它创建一个新记录。

我想测试唯一性的标准方法是在“标题”列上创建一个索引。但我担心这样一个索引的大小,因为“标题”可能很长。

所以我想知道是否有一种方法可以创建“标题”的“签名”并使用它来测试唯一性?是否有一些散列函数可以从 unicode 字符串散列到唯一值?

任何指针将不胜感激。谢谢。

4

1 回答 1

4

简单的答案是使用一个 MySql 哈希函数 (MD5 SHA1) 来创建每个标题的哈希并将其与标题本身一起存储。

然后,您可以索引散列值,这将产生更好更快的索引。

这些基本上是加密函数,会占用大量 CPU,但您的语言环境可能会提供更简单、更快的哈希,例如 crc32。

在散列之前将您的“标题”进行清理也是值得的。将多个空格强制为一个空格,将所有字符折叠为小写删除标点符号等。

所以“STACKOVERLOW IS GREAT ......”和“stackoverflow is great”会产生相同的哈希值。

于 2011-03-23T09:34:29.517 回答