【发布时间】:2011-11-14 09:30:50
【问题描述】:
对我来说,UNIQUE 关键字是为了更好地构建您的表格(将 PRIMARY KEY 放在一边,用于识别目的)。例如,文件。如果您不想将相同的文件添加到数据库中,您可以将其 SHA-2 哈希键用作UNIQUE KEY。但是 SHA-2 是 512 个字符,而 InnoDB 有 255 个字符的限制。为什么 MySQL 有这个限制以及如何使用更大、更可靠、唯一的键,例如 SHA-2
【问题讨论】:
对我来说,UNIQUE 关键字是为了更好地构建您的表格(将 PRIMARY KEY 放在一边,用于识别目的)。例如,文件。如果您不想将相同的文件添加到数据库中,您可以将其 SHA-2 哈希键用作UNIQUE KEY。但是 SHA-2 是 512 个字符,而 InnoDB 有 255 个字符的限制。为什么 MySQL 有这个限制以及如何使用更大、更可靠、唯一的键,例如 SHA-2
【问题讨论】:
SHA2-512 给出 512 位,即 64 字节。或十六进制的 char(128)。
在 MySQL 5.5 中,唯一索引键长度对于 MyISAM 为 1000 字节,对于 InnoDB 为 767。
当您选择使用 AUTO_INCREMENT 代理主键时,唯一性用于强制执行自然唯一性。或者当你想enforce subtypes 时,超级键唯一性。等等
编辑:
要强制 LOB 值的唯一性,您只需对其进行哈希处理并添加一个约束。如果您有足够多的行来产生可衡量的冲突风险,那么为什么数据库中有这么多 LOB 值?
【讨论】:
varchar(99999)
UNIQUE 的 InnoDB 的限制是 255
在 MySQL 中,UNIQUE 用于索引。最好不要用它来检查文本字段的唯一性。
我总是检查应用程序中的数据完整性和唯一性,而不是 MySQL。
【讨论】:
UNIQUE 来构建表格吗?如果我希望我的用户表强制每个人都有唯一的 ID(自动)、电子邮件、用户名和昵称,最大长度都大于 255。我应该按照 OP 的建议签入应用程序,还是让 MySQL 处理它。