【问题标题】:Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes [duplicate]语法错误或访问冲突:1071 指定的密钥太长;最大密钥长度为 767 字节 [重复]
【发布时间】:2018-09-15 06:41:34
【问题描述】:

我的 php 项目有一个迁移文件。我收到此错误

语法错误或访问冲突:1071 指定的键太长;最大限度 密钥长度为 767 字节

我明白这个问题是由于 varchar(512) 和 charset - UTF8 造成的,但我该如何解决这个问题?我无法更改我的迁移脚本。 MySql的my.ini中的一些属性可以修改吗?

CREATE TABLE if not exists usermaster (
  user_id bigint(20) NOT NULL,
  username varchar(512) NOT NULL,
  PRIMARY KEY (user_id,username),
   KEY fk_um_idx (user_id),
  CONSTRAINT fk_um_idx FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

【问题讨论】:

  • 你能升级到 MySQL 5.7
  • 忘了说我已经把 MySQL 更新到 10.1.31
  • 否则我必须将表格的字符集从 utf8mb4 更改为 utf8
  • @Sinto 我无法更改脚本
  • ?? MySQL to 10.1.31 我想你的意思是说你使用的是mariaDB 而不是 MySQL

标签: php mariadb


【解决方案1】:

如果您坚持将用户名的长度保持在 512,以下关于重复主题的评论提供了 2 种可能性:https://stackoverflow.com/a/41298282/5987517

我认为在我们的案例中最好的解决方案是将您的编码从 UTF-8 更改为 latin1_general_ci

【讨论】:

    猜你喜欢
    • 2015-06-22
    • 2019-10-11
    • 2018-09-28
    • 2013-12-21
    • 2015-06-29
    • 2016-10-04
    • 2017-07-03
    • 2017-09-09
    • 2017-04-01
    相关资源
    最近更新 更多