mysql - 有什么方法可以创建字符串的 "signature"以确保字符串是唯一的?或者我应该使用唯一的数据库索引?

标签 mysql hash unique digital-signature unique-key

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

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

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

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

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

最佳答案

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

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

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

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

因此“STACKOVERLOW 很棒......”和“stackoverflow 很棒”会产生相同的散列。

关于mysql - 有什么方法可以创建字符串的 "signature"以确保字符串是唯一的?或者我应该使用唯一的数据库索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5403015/

相关文章:

mysql - 时间戳(自动)何时更新?

php - 如何在 PHP 中使用 PDO 发现 MySQL 错误

javascript - NestJS 哈希密码

Java尝试用唯一的数字填充int数组

mysql - 使用 RegExp 缩短 MySQL SELECT

mysql - 如何备份MySQL数据库?

java - Trove HashMap 未实现 hashCode

c - 从大文件中查找唯一值

css - 页面上的唯一 HTML ID

php - php array_unique 的奇怪行为