我已经检查过这个错误的原因是什么。因此,我知道我超过了限制(767字节),试图将电子邮件VARCHAR(320)设置为UNIQUE键(320 * 3 = 960字节)。
但是,我使用MySQL作为数据库,我需要将电子邮件值用作我的应用程序中的唯一键。你能告诉我,我应该改变什么才能解决这个问题?
答案 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=DYNAMIC
或ROW_FORMAT=COMPRESSED
这将允许您在InnoDB索引中包含长达3072字节的列,因此您的320字符列可以包含在唯一索引中。
阅读我的博客文章了解更多详情:
http://mechanics.flite.com/blog/2014/07/29/using-innodb-large-prefix-to-avoid-error-1071/