相关疑难解决方法(0)

指定密钥太长 - 最大密钥长度为767字节

当我执行以下命令时:

create table assessment (
    id integer not null auto_increment unique,
    assignment_weight_type tinyint not null,
    description varchar(255),
    end_date datetime not null,
    from_grade tinyint not null,
    f_id tinyint not null,
    name varchar(255) not null,
    start_date datetime not null,
    status tinyint not null,
    weight smallint,
    school_id integer not null,
    school_year_id integer not null,
    s_id integer, primary key (id),
    unique (name, school_id, school_year_id, from_grade, f_id)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

Specified key was too long; max key length is 767 bytes
Run Code Online (Sandbox Code Playgroud)

我正在使用utf8mb4的字符集.那我为什么收到错误信息呢?

java mysql utf8mb4

7
推荐指数
1
解决办法
7311
查看次数

laravel 迁移指定的键太长;最大密钥长度为 767 字节

我正在尝试迁移 laravel 迁移,但出现错误:

Migrating: 2014_10_12_100000_create_password_resets_table

   Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `password_
resets` add index `password_resets_email_index`(`email`))
Run Code Online (Sandbox Code Playgroud)

我的代码是:

if (!Schema::hasTable('password_resets')) {
            Schema::create('password_resets', function (Blueprint $table) {
                $table->string('email')->index();
                $table->string('token');
                $table->timestamp('created_at')->nullable();
            });
        }
Run Code Online (Sandbox Code Playgroud)

migration laravel

6
推荐指数
1
解决办法
6611
查看次数

如何增加MySQL 5.1中的密钥长度?

运行创建索引的Rails迁移时,我得到:

Mysql::Error: Specified key was too long; max key length is 1000 bytes: CREATE UNIQUE INDEX `index_matches_on_foo_and_bar_id_and_baz_id` ON `matches` (`foo`, `bar_id`, `baz_id`)
Run Code Online (Sandbox Code Playgroud)

我需要设置什么MySQL变量来增加它,我在哪里设置它以便它影响所有会话,而不仅仅是当前的客户端会话?

mysql

5
推荐指数
2
解决办法
9945
查看次数

DatabaseError:(1071,'指定密钥太长;最大密钥长度为767字节')

我有一个django项目,我想进行一些单元测试.当我尝试: python manage.py test它抛出此错误,我在这里找不到有关它的更多信息.

我的数据库设置settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': 'localhost',           
        'PORT': '3306', 
    }
} 
Run Code Online (Sandbox Code Playgroud)

它看起来像是与之相关的东西InnoDB,MyISAM但我不知道出了什么问题以及如何解决它.谢谢!

django版本:1.5.4
mysql版本:5.5

此外,unique=True任何django型号都没有设置.

python mysql django

4
推荐指数
2
解决办法
5098
查看次数

Doctrine表migrations_versions列长度

在带有 Doctrine Migrations 2.2.0 的 Symfony 5 上,我想执行自定义的 Doctrine 迁移文件。我的实体是使用 InnoDB utf8mb4_unicode_ci (doctrine.yaml 中的默认值)创建的。

当我执行时bin/console doctrine:migrations:status --show-versions我得到:

An exception occurred while executing 'CREATE TABLE migration_versions (version VARCHAR(1024) NOT NULL, executed_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', PRIMARY KEY(version)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB':
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 3072 bytes
Run Code Online (Sandbox Code Playgroud)

所以我修改doctrine_migrations.yaml并将version_column_length的值更改为255,但现在使用相同的命令我得到

In BaseNode.php line 425:                                                                                                                                
Invalid configuration for path "doctrine_migrations.storage.table_storage.version_column_length": The minimum length for …
Run Code Online (Sandbox Code Playgroud)

symfony doctrine-migrations

4
推荐指数
1
解决办法
1463
查看次数

指定密钥太长; 最大密钥长度为1000字节

通过mySQL转储importimg Joomla 1.5数据库,但它给出错误"1071 - 指定密钥太长;最大密钥长度为1000字节"

culrpit sql语句是:

    CREATE TABLE  `jos_core_acl_aro` (

 `id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
 `section_value` VARCHAR( 240 ) NOT NULL DEFAULT  '0',
 `value` VARCHAR( 240 ) NOT NULL ,
 `order_value` INT( 11 ) NOT NULL DEFAULT  '0',
 `name` VARCHAR( 255 ) NOT NULL ,
 `hidden` INT( 11 ) NOT NULL DEFAULT  '0',
  PRIMARY KEY (  `id` ) ,
  UNIQUE KEY (  `section_value` ,  `value` ) ,
  KEY  `jos_gacl_hidden_aro` (  `hidden` )
  ) ENGINE = MYISAM …
Run Code Online (Sandbox Code Playgroud)

mysql joomla character-encoding joomla1.5

3
推荐指数
1
解决办法
2602
查看次数

长字符串的MySQL索引

我有MySQL InnoDb表,我想存储长(限制是20k符号)字符串.有没有办法为这个字段创建索引?

mysql

3
推荐指数
2
解决办法
6580
查看次数

指定密钥太长; 最大密钥长度为767字节

据我所知,InnoDB索引的最大长度为767字节.

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(254) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  .....
  `token` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `rank` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `user_token_index` (`token`),
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

我想在我的电子邮件上创建索引.

alter table agent add UNIQUE index idx_on_email (email);
Run Code Online (Sandbox Code Playgroud)

但得到了错误信息:

指定密钥太长; 最大密钥长度为767字节.

但令牌列的长度只有128个字节,电子邮件是254个字节,不超过767个字节.希望有人能帮助我!提前致谢!

mysql indexing innodb

2
推荐指数
1
解决办法
9960
查看次数

InnoDB最大密钥长度

这是一个相当直接的问题,但我在查找一个明确的答案谷歌搜索时遇到了问题.在MySQL 5.1.53上,使用InnoDB和varchar(1024)字段(我正在索引Exchange 2010事件ID).我想知道当我索引这个字段时最大密钥长度是多少.我想知道如果密钥长度不够长,我是否应该缩短字段并使用类似sha512哈希的东西.

mysql innodb

1
推荐指数
1
解决办法
3545
查看次数

错误:#1071 - 指定密钥太长; 最大密钥长度为1000字节 - mysql 5.0.91

我使用的是mysql 5.0.91,我需要保存URL(有些很小,有些很长).我想使用,varchar(2000)但我收到一个错误:

#1071 - 指定密钥太长; 最大密钥长度为1000字节

使用mysql 5.0.91在我的主机上保存URL的最佳方法是什么?

mysql mysql-error-1071

1
推荐指数
1
解决办法
7026
查看次数

键在mariadb中太长,但是在mysql上使用相同编码的相同脚本

我一直在阅读这个问题和相关文章的几种变体,尽管我最终确实解决了我的问题(最终s/utf8mb4/utf8/g在我的sql脚本上完成了工作),但我仍然茫然为什么这可以在MySQL上正常工作,但是不得不在MariaDB中搜索替换。

设置:

  • 机器1:Mysql 5.7.19
  • 机器2:MariaDb 10.1.25

在两台机器上,我都创建了数据库,如下所示:

CREATE DATABASE `test` COLLATE 'utf8mb4_general_ci'
Run Code Online (Sandbox Code Playgroud)

输入脚本是一个16MB的SQL文件,包含大约300个表,所有表都声明为 ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED

当我尝试在MariaDb上导入此文件时,我得到:

ERROR 1071 (42000) at line 602: Specified key was too long; max key length is 767 bytes
Run Code Online (Sandbox Code Playgroud)

但是我在MySQL上导入了相同的文件而没有更改,所有表的创建都很好。

为了能够在MariaDB计算机上执行相同的操作,我需要s/utf8mb4/utf8/g在运行脚本之前执行上述操作。

问题的要点是:有没有一种方法可以设置MariaDB,以便可以以与MySQL中相同的格式导入文件?

关于@Cbroe提出的重复操作,它以两种方式失败:

1-它解释了MyIsam和InnoDB之间的索引大小差异(并且我在两种情况下都使用InnoDB,尽管它在MySQL中工作,但在MariaDB中失败)。

2-如果可能的话,它没有说明如何使MariaDB充当MySQL。由于可以将此脚本与此引擎一起使用,并且可以在MySQL上使用此编码,因此在MariaDB中是否可以这样做?如果没有,为什么不呢?

此外,我们已经有了一个有效的答案,该答案不同于所谓的重复答案。

mysql mariadb

1
推荐指数
1
解决办法
1802
查看次数