【问题标题】:Unique VARCHAR(65535) field per <ID> in MySQLMySQL 中每个 <ID> 的唯一 VARCHAR(65535) 字段
【发布时间】:2016-08-20 15:41:22
【问题描述】:

是否有解决方案可以在 MySQL 中为每个 ID 维护一个唯一的 VARCHAR(65535) 字段?

【问题讨论】:

  • 每个 ID 唯一 - 这是什么意思?
  • ID 是主键实体。

标签: mysql constraints unique varchar


【解决方案1】:

我会对字段的值使用散列函数并将其存储在同一张表上的单独唯一字段中。

所以你的桌子应该是这样的:

create table my_table (
   id integer not null primary key,
   text_content varchar(65535) not null,
   text_hash varchar(128) not null unique
);

在该表上插入时,您将为 text_content 字段计算 sha256 哈希并将其存储在 text_hash 字段中。这样您就可以确定text_content 值在您的表中是唯一的。

如果您喜欢 DB SIDE 编程,您可以将此逻辑放在触发器上,前提是 MySQL 支持它们。

【讨论】:

  • 如何处理冲突?
  • 碰撞将是非常罕见的。不要以为你会找到他们。这就是这些算法的设计目的。看看这个问题:stackoverflow.com/questions/4014090/…
  • 这可以通过在哈希冲突的情况下进行二进制比较 + 在发生冲突时用于密钥唯一性的自动递增辅助字段来解决 100% 防弹问题。没有任何数据库解决方案可以执行这样的任务吗?
  • 这也可能是使用 sha2() 函数生成的列。
  • @Nick - 我的评论没有解决您的碰撞问题。我只是建议改进答案,使用MySQL 5.7 generated columns。类似:text_hash varchar(128) as sha2(text_content, 256) unique。这样,您可以将所有内容保留在表定义中。您的应用程序中不需要触发器或其他代码。
猜你喜欢
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多