laravel 5.4 迁移无法正常工作
Posted
技术标签:
【中文标题】laravel 5.4 迁移无法正常工作【英文标题】:laravel 5.4 migration not working properly 【发布时间】:2017-10-05 05:00:19 【问题描述】:我在使用 laravel 迁移在数据库中创建表时遇到了这个问题。我不知道它可能有什么问题,因为我在以前的系统上使用了相同的命令。这是我在使用 composer 创建表时遇到的错误。
$ php artisan migrate 迁移表创建成功。
[Illuminate\Database\QueryException] SQLSTATE[42000]:语法错误 或访问冲突:1071 指定的密钥太长;最大键 长度为767字节(SQL:alter table
users
add uniqueusers_email_unique
([PDOException] SQLSTATE[42000]:语法错误或访问冲突: 1071 指定的密钥太长;最大密钥长度为 767 字节
【问题讨论】:
【参考方案1】:Laravel 5.4 默认使用utf8mb4
。解决此错误的一种方法是默认返回utf8
。
转到您的config\database.php
并将数据库charset
更改为uft8
并将collation
更改为utf8_unicode_ci
:
'mysql' => [
//..
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
//..
],
【讨论】:
【参考方案2】:字符限制取决于您使用的字符集。 Laravel
正在使用utf8mb4
,其最大索引的字符限制为191
。
你只需要设置你的字符限制来纠正一个。从这里读到 Laravel Index Length
索引长度和 MySQL / MariaDB
Laravel 默认使用
utf8mb4
字符集,其中包括 支持在数据库中存储“表情符号”。如果您正在运行MySQL
的版本早于5.7.7
版本或MariaDB
早于10.2.2
发布,可能需要手动配置默认 迁移生成的字符串长度,以便 MySQL 创建 他们的索引。您可以通过调用Schema::defaultStringLength
你的AppServiceProvider
中的方法:
use Illuminate\Support\Facades\Schema;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
Schema::defaultStringLength(191);
或者,您可以启用
innodb_large_prefix
选项 数据库。请参阅数据库的文档以获取有关 如何正确启用此选项。
【讨论】:
【参考方案3】:这是 Laravel 5.4 中的一个错误
要修复它,请将其放在 Schema::create 方法调用之上:
Schema::defaultStringLength(191);
在这里阅读更多:
https://github.com/laravel/framework/issues/17508
【讨论】:
以上是关于laravel 5.4 迁移无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
php artisan migrate 不适用于 Laravel 5.4 中的 XAMPP