在 make:auth 之后迁移 Laravel 时出错
Error in migrating Laravel after make:auth
我正在努力学习Laravel 5.4
。在我发布命令 php artisan make:auth
并发布命令 php artisan migrate
后,会显示以下错误并且一些数据库表不会变大:
[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 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
关于我需要使用一些列作为具有 Persian Script Font
字符的容器这一事实(其他一些列包含英语、西班牙语......字符),我创建了 MySQL
数据库utf8_general_ci
并且我认为错误是由于数据库的编码而引发的。您能否告诉我 character encoding
我将使用什么来构建数据库以便能够利用 Laravel 的 Auth 功能?非常感谢您。
让我们看看 SHOW CREATE TABLE
这样我们就可以看到 email
.
的定义
同时,我猜它包括类似
的内容
email VARCHAR(255) CHARACTER SET utf8mb4,
INDEX(email)
做其中之一(每个都有其缺点):
- 255 -> 191(但请确保您目前没有更长的地址)
- utf8mb4 -> utf8(因此不允许表情符号和一些汉字)
- INDEX(email(20))(如果是
UNIQUE
或 PRIMARY KEY
,请 不要 选择此选项)
- 可以重新配置(如果在 5.6.3 之后)服务器和 table 以允许更大的索引;这不是 'default' 直到 5.7.7.
Laravel 5.4 有一个关于此错误的 documented 问题。
对于 运行 遇到此问题的其他人,这也是一个很好的解决方法:
- 打开你的
app\Provider\AppServiceProvider.php
改为:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191); //
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
运行再次迁移
我正在努力学习Laravel 5.4
。在我发布命令 php artisan make:auth
并发布命令 php artisan migrate
后,会显示以下错误并且一些数据库表不会变大:
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter tableusers
add uniqueusers_email_unique
(
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
关于我需要使用一些列作为具有 Persian Script Font
字符的容器这一事实(其他一些列包含英语、西班牙语......字符),我创建了 MySQL
数据库utf8_general_ci
并且我认为错误是由于数据库的编码而引发的。您能否告诉我 character encoding
我将使用什么来构建数据库以便能够利用 Laravel 的 Auth 功能?非常感谢您。
让我们看看 SHOW CREATE TABLE
这样我们就可以看到 email
.
同时,我猜它包括类似
的内容email VARCHAR(255) CHARACTER SET utf8mb4,
INDEX(email)
做其中之一(每个都有其缺点):
- 255 -> 191(但请确保您目前没有更长的地址)
- utf8mb4 -> utf8(因此不允许表情符号和一些汉字)
- INDEX(email(20))(如果是
UNIQUE
或PRIMARY KEY
,请 不要 选择此选项) - 可以重新配置(如果在 5.6.3 之后)服务器和 table 以允许更大的索引;这不是 'default' 直到 5.7.7.
Laravel 5.4 有一个关于此错误的 documented 问题。
对于 运行 遇到此问题的其他人,这也是一个很好的解决方法:
- 打开你的
app\Provider\AppServiceProvider.php
改为:
<?php namespace App\Providers; use Illuminate\Support\Facades\Schema; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Schema::defaultStringLength(191); // } /** * Register any application services. * * @return void */ public function register() { // } }
运行再次迁移