在Laravel 5.4上使用php artisan make:auth迁移错误
[Illuminate\Database\QueryException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter tabl e users add unique users_email_unique(email))
[PDOException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
如果您运行“php artisan migrate”时出现此错误。你可以这样修改你想要更新的表:
DB::statement('ALTER TABLE table_name ROW_FORMAT = DYNAMIC;');
在迁移脚本中。例子:
class MyMigration extends Migration {
/**
* Run the migrations.
*/
public function up()
{
DB::statement('ALTER TABLE table_name ROW_FORMAT = DYNAMIC;');
Schema::table('table_name', function ($table) {
//....
});
}
/**
* Undo the migrations.
*/
public function down()
{
//....
}
}
然后再次运行php artisan migrate
1-进入/config/database.php,找到这些行
'mysql' => [
...,
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
...,
'engine' => null,
]
并更改为:
'mysql' => [
...,
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
...,
'engine' => 'InnoDB',
]
2-运行php artisan config:cache重新配置laravel
3-删除数据库中现有的表,然后再次运行php artisan migrate
对于不想更改AppServiceProvider.php的人。
(在我看来,仅仅为了迁移而更改AppServiceProvider.php是一个坏主意)
您可以将数据长度添加回database/migrations/下的迁移文件,如下所示:
create_users_table.php
$table->string('name',64);
$table->string('email',128)->unique();
create_password_resets_table.php
$table->string('email',128)->index();