首先我在
中收到错误php artisan migrate
as
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
然后我在laracasts
上找到了一个帖子来解决这个问题
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
添加后,当我运行
php artisan optimize
然后我会看到如下新错误
Call to undefined method Illuminate\Database\Schema\MySqlBuilder::defaultStringLength()
请协助解决所有这些错误。
答案 0 :(得分:5)
defaultStringLength
在Laravel v5.4中引入。 Reference
您可以更新Laravel版本
OR
您指定的长度为$table->string('coumname', 255);
您不能指定超过255
的长度。如果您保留length参数,它将默认分配255
答案 1 :(得分:1)
这是因为Laravel 5.4默认使用utf8mb4字符集,其中包括支持在数据库中存储“emojis”。您可以从以下两种解决方案中选择任何一种:
1)改变
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
到
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
2)编辑位于App \ Providers \ AppServiceProvider.php的AppServiceProvider,并将以下行添加到boot()方法并加载Schema facade:
use Illuminate\Support\Facades\Schema;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
这样做实际上是更改数据库中的默认最大字段长度,实际上将最大字符串长度从255缩短到最多191个字符(utf8使用每个字符3个字节,而utf8mb4每个字符使用4个字节,您的字段现在可以保持25%以下的字符255 * 75%= 191.25)。因此,如果您未在迁移中手动设置字符串字段,则新默认值为191。
答案 2 :(得分:0)
在Laravel Project中查找AppServiceProvider
1.First Add Facade
use Illuminate\Support\Facades\Schema;
2.在启动功能中添加以下行
function boot() {
Schema::defaultStringLength(191);
}
答案 3 :(得分:0)
添加使用Illuminate \ Support \ Facades \ Schema;到App / Providers文件夹中的AppServiceProvider.php文件。
添加Schema :: defaultStringLength(191);到启动功能。
答案 4 :(得分:-1)
如果Laravel< 5.4 1.在Laravel Project中查找AppServiceProvider 2.在引导方法
中注释行或删除Schema :: defaultStringLength(191)