【问题标题】:mysql #1071 - Specified key was too long; max key length is 767 bytesmysql #1071 - 指定的密钥太长;最大密钥长度为 767 字节
【发布时间】:2016-10-04 08:06:06
【问题描述】:

我尝试执行下面的 SQL 并给出了上面的错误

    CREATE TABLE IF NOT EXISTS `oic_assemblyman_data` (
`id` bigint( 100 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`firstname` varchar( 300 ) COLLATE utf8_unicode_ci NOT NULL ,
`lastname` varchar( 300 ) COLLATE utf8_unicode_ci NOT NULL ,
`email` varchar( 300 ) COLLATE utf8_unicode_ci DEFAULT NULL ,
`phone` varchar( 300 ) COLLATE utf8_unicode_ci DEFAULT NULL ,
`office_latitude` varchar( 20 ) COLLATE utf8_unicode_ci DEFAULT NULL ,
`office_longitude` varchar( 20 ) COLLATE utf8_unicode_ci DEFAULT NULL ,
`website_welcome_address` text COLLATE utf8_unicode_ci,
`website_header_color` varchar( 15 ) COLLATE utf8_unicode_ci DEFAULT NULL ,
`website_footer_color` varchar( 20 ) COLLATE utf8_unicode_ci DEFAULT NULL ,
`about_yourself` text COLLATE utf8_unicode_ci NOT NULL ,
`password` varchar( 100 ) COLLATE utf8_unicode_ci NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE KEY `email` ( `email` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;

谁能指出问题的原因

【问题讨论】:

  • 错误是不言自明的。密钥的长度大于接受的长度。你能把钥匙贴出来吗?
  • 主键是“id bigint(100)”。
  • 对您的 varchars 使用 255 的长度而不是 300
  • @juergend 既然最大密钥长度是 767,为什么 300 字节会有问题?
  • 谢谢@juergen d。 254 人工作

标签: mysql


【解决方案1】:

将您的电子邮件更改为 varchar(255) 应该可以。我认为它使用 utf-8 编码,每个字符最多 3 个字节,然后 767/3=255...2 所以你可以将最大长度设置为 255

【讨论】:

    猜你喜欢
    • 2015-06-22
    • 2013-12-21
    • 2015-06-29
    • 2016-04-15
    • 2012-05-31
    • 2012-02-03
    • 2017-11-23
    相关资源
    最近更新 更多