当我执行以下命令时:
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的字符集.那我为什么收到错误信息呢?
我正在尝试迁移 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) 运行创建索引的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变量来增加它,我在哪里设置它以便它影响所有会话,而不仅仅是当前的客户端会话?
我有一个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型号都没有设置.
在带有 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) 通过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) 据我所知,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 5.1.53上,使用InnoDB和varchar(1024)字段(我正在索引Exchange 2010事件ID).我想知道当我索引这个字段时最大密钥长度是多少.我想知道如果密钥长度不够长,我是否应该缩短字段并使用类似sha512哈希的东西.
我使用的是mysql 5.0.91,我需要保存URL(有些很小,有些很长).我想使用,varchar(2000)但我收到一个错误:
#1071 - 指定密钥太长; 最大密钥长度为1000字节
使用mysql 5.0.91在我的主机上保存URL的最佳方法是什么?
我一直在阅读这个问题和相关文章的几种变体,尽管我最终确实解决了我的问题(最终s/utf8mb4/utf8/g在我的sql脚本上完成了工作),但我仍然茫然为什么这可以在MySQL上正常工作,但是不得不在MariaDB中搜索替换。
设置:
在两台机器上,我都创建了数据库,如下所示:
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中是否可以这样做?如果没有,为什么不呢?
此外,我们已经有了一个有效的答案,该答案不同于所谓的重复答案。