我使用Lumen 5.6和mysql。当我输入“ php artisan migration”时,会发生以下错误:
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t
oo long; max key length is 767 bytes (SQL: alter table `users` add unique `
users_email_unique`(`email`))
我将以下代码放入AppServiceProvider的“启动”方法中
Schema::defaultStringLength(191);
但是我没有取得任何成功。
答案 0 :(得分:9)
您只需要再走一步
转到bootstrap文件夹中的app.php并取消注释或修改此行
Z
此代码
`mysql.createPool({
connectionLimit: mySQLConfig.connectionLimit,
host: mySQLConfig.host,
user: mySQLConfig.username,
password: mySQLConfig.password,
database: mySQLConfig.database,
timezone: 'Z'
});`
祝你有美好的一天
答案 1 :(得分:7)
use Illuminate\Support\Facades\Schema; //AppServiceProvider.php
public function boot(){
Schema::defaultStringLength(191);
}
//rollback your migration or delete all table from database then migrate again.
答案 2 :(得分:4)
转到文件database.php
中的配置,然后编辑
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
到
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
答案 3 :(得分:3)
您需要做几件事。我也遇到了这个问题,并按照以下两个步骤进行了修复
转到引导目录中的app.php并取消注释或修改此行。
// $app->register(App\Providers\AppServiceProvider::class);
现在您需要在boot()
文件中定义AppServiceProvider
函数
public function boot()
{
Schema::defaultStringLength(191);
}
那你很好去!
答案 4 :(得分:2)
$app->register(App\Providers\AppServiceProvider::class);
AppServiceProvider
类中:public function boot()
{
Schema::defaultStringLength(191);
}
答案 5 :(得分:-1)
已知在Laravel / Lumen 7.x中工作:
我尝试过对AppServiceProvider::class
和上面提到的其他解决方案不加注释,但是以下内容对我有用。
如果您在/vendor/laravel/lumen-framework/config/database.php
中查找charset
和collation
,则代码会检查您的.env
文件并诉诸utf8mb4
和utf8mb4_unicode_ci
,分别。
如果您数据库的字符集设置为utf8
,而排序规则设置为utf8_unicode_ci
,只需将以下内容添加到.env
文件中:
# .env
...
DB_CHARSET=utf8
DB_COLLATION=utf8_unicode_ci
...