调用未定义的方法 Illuminate\Database\Schema\MySqlBuilder::defaultStringLength()
Call to undefined method Illuminate\Database\Schema\MySqlBuilder::defaultStringLength()
首先我在
中遇到了错误
php artisan migrate
作为
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
然后我在 laracasts
上找到了一个 post 来解决这个问题
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
添加这个之后,当我 运行
php artisan optimize
然后我收到如下新错误
Call to undefined method Illuminate\Database\Schema\MySqlBuilder::defaultStringLength()
请协助消除所有这些错误。
defaultStringLength
在 Laravel v5.4 中引入。 Reference.
您可以更新 Laravel 版本
或
您指定的长度为 $table->string('coumname', 255);
您指定的长度不能超过 255
。如果您保留长度参数,它将默认分配 255
在Laravel项目中找到AppServiceProvider
1.First 添加门面
use Illuminate\Support\Facades\Schema;
2.Add 引导函数中的以下行
function boot() {
Schema::defaultStringLength(191);
}
这是因为Laravel 5.4默认使用utf8mb4字符集,其中包括支持在数据库中存储“emojis”。您可以从以下 2 种解决方案中选择任何一种:
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。
如果Laravel < 5.4
1.在Laravel项目中找到AppServiceProvider
2.注释行或删除引导方法
中的Schema::defaultStringLength(191)
添加使用Illuminate\Support\Facades\Schema;到 App/Providers 文件夹中的 AppServiceProvider.php 文件。
添加Schema::defaultStringLength(191);到启动函数。
首先我在
中遇到了错误php artisan migrate
作为
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
然后我在 laracasts
上找到了一个 post 来解决这个问题
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
添加这个之后,当我 运行
php artisan optimize
然后我收到如下新错误
Call to undefined method Illuminate\Database\Schema\MySqlBuilder::defaultStringLength()
请协助消除所有这些错误。
defaultStringLength
在 Laravel v5.4 中引入。 Reference.
您可以更新 Laravel 版本
或
您指定的长度为 $table->string('coumname', 255);
您指定的长度不能超过 255
。如果您保留长度参数,它将默认分配 255
在Laravel项目中找到AppServiceProvider
1.First 添加门面
use Illuminate\Support\Facades\Schema;
2.Add 引导函数中的以下行
function boot() {
Schema::defaultStringLength(191);
}
这是因为Laravel 5.4默认使用utf8mb4字符集,其中包括支持在数据库中存储“emojis”。您可以从以下 2 种解决方案中选择任何一种:
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。
如果Laravel < 5.4 1.在Laravel项目中找到AppServiceProvider 2.注释行或删除引导方法
中的Schema::defaultStringLength(191)添加使用Illuminate\Support\Facades\Schema;到 App/Providers 文件夹中的 AppServiceProvider.php 文件。
添加Schema::defaultStringLength(191);到启动函数。