当我执行以下命令时:
ALTER TABLE `mytable` ADD UNIQUE (
`column1` ,
`column2`
);
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
#1071 - Specified key was too long; max key length is 767 bytes
Run Code Online (Sandbox Code Playgroud)
有关column1和column2的信息:
column1 varchar(20) utf8_general_ci
column2 varchar(500) utf8_general_ci
Run Code Online (Sandbox Code Playgroud)
我认为varchar(20)只需要21个字节,而varchar(500)只需要501个字节.所以总字节数是522,小于767.那么为什么我会得到错误信息呢?
#1071 - Specified key was too long; max key length is 767 bytes
Run Code Online (Sandbox Code Playgroud) 我复制了一个带有流浪盒的项目,它安装了Debian,Nginx,PhpMyAdmin,..随着新项目,Laravel php artisan migrate不再工作,我得到错误:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1709 Index column size too large. The maximum column size is 767 bytes. (SQL: alter table `courses` add unique `courses_name_unique`(`na
me`))
Run Code Online (Sandbox Code Playgroud)
当我创建工作项目数据库的转储(结构+数据)并将其导入数据库时给出迁移时的错误,然后一切正常,它创建所有表和数据导入..
如何修复大小以便我可以运行migrate方法?
我知道这个问题已经讨论,解决或关闭了.
但我想问的是,为什么数字191?
Schema::defaultStringLength(191);
Run Code Online (Sandbox Code Playgroud)
我试过:如果192,错了.191,好的.在此之后,我还编辑了database\migrations\xxx_user_table.php
更改此设置
$table->string('name');
Run Code Online (Sandbox Code Playgroud)
成为
$table->string('name', 255);
Run Code Online (Sandbox Code Playgroud)
然后运行php artisan migrate,没关系.使用一些mysql工具查看用户表的模式,varchar的名称长度实际为255,其他列为191.
我看到这些文章
@ https://laravel-news.com/laravel-5-4-key-too-long-error
@ Laravel迁移:唯一密钥太长,即使指定
@ https://github.com/ laravel/framework/issues/17508
@ https://laravel.com/docs/master/migrations#creating-indexes
这个:@ https://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html
对于使用REDUNDANT或COMPACT行格式的InnoDB表,索引键前缀长度限制为767字节.例如,您可能会在TEXT或VARCHAR列上使用超过255个字符的列前缀索引达到此限制,假设为utf8mb3字符集,并且每个字符最多包含3个字节.
但为什么长度255的名字还可以?
并且192*3 = 576,小于767,为什么192不行?
我有以下错误.有人理解为什么?
php工匠迁移
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key
was too long; max key length is 767 bytes (SQL: alter table `users`
add unique `users_email_unique`(`email`))
Run Code Online (Sandbox Code Playgroud)
create_users_table.php
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name',255);
$table->string('email',255)->unique();
$table->string('password',255);
$table->rememberToken();
$table->timestamps();
});
Run Code Online (Sandbox Code Playgroud) 我正在使用 Laravel,当我尝试运行php artisan make:migrate它时显示此错误:
Illuminate\Database\QueryException : SQLSTATE[42000]: 语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节(SQL:alter table
usersadd uniqueusers_email_unique(在 /Users/soksan/Desktop/TestLaravel/multiUsers/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
660| // If an exception occurs when attempting to run a query, we'll format the error
661| // message to include the bindings with SQL, which will make this exception a
662| // lot more helpful to the developer instead of just the database's errors.
663| catch (Exception $e) {
> 664| throw new QueryException(
665| $query, …Run Code Online (Sandbox Code Playgroud)