将电子邮件VARCHAR(320)存储为UNIQUE,#1071 - 指定密钥太长;最大密钥长度为767

时间:2016-03-31 15:52:23

标签: mysql sql unique-key

我已经检查过这个错误的原因是什么。因此,我知道我超过了限制(767字节),试图将电子邮件VARCHAR(320)设置为UNIQUE键(320 * 3 = 960字节)。

但是,我使用MySQL作为数据库,我需要将电子邮件值用作我的应用程序中的唯一键。你能告诉我,我应该改变什么才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

在前254个字符左右创建一个唯一索引:

create unique index idx_t_email on t(email(254));

电子邮件应短于254个字符。

根据这个answer,最长的电子邮件无论如何都是254个字符,所以这应该没问题。

答案 1 :(得分:1)

假设您使用的是MySQL 5.5.14或更新版本,您可以通过以下方式解决此问题:

  • 启用innodb_large_prefix服务器设置
  • 启用innodb_file_format = BARRACUDA
  • 使用ROW_FORMAT=DYNAMICROW_FORMAT=COMPRESSED

这将允许您在InnoDB索引中包含长达3072字节的列,因此您的320字符列可以包含在唯一索引中。

阅读我的博客文章了解更多详情:

http://mechanics.flite.com/blog/2014/07/29/using-innodb-large-prefix-to-avoid-error-1071/