1

首先我遇到了一个错误

php artisan migrate

作为

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()

请协助摆脱所有这些错误。

4

5 回答 5

5

defaultStringLength在 Laravel v5.4 中引入。参考

你可以更新 Laravel 版本

或者

您将长度指定为$table->string('coumname', 255);您不能指定超过255。如果您保留长度参数,它将255默认分配

于 2017-02-08T06:16:54.427 回答
1

这是因为 Laravel 5.4 默认使用 utf8mb4 字符集,其中包括支持在数据库中存储“表情符号”。您可以从以下 2 种解决方案中选择任何一种:

1)更改

'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',

'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',

2) 编辑位于 App\Providers\AppServiceProvider.php 的 AppServiceProvider 并将以下行添加到 boot() 方法并加载 Schema 门面:

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。

于 2017-08-21T06:58:59.067 回答
0

在 Laravel 项目中查找 AppServiceProvider

1.首先添加门面

use Illuminate\Support\Facades\Schema;

2.在启动功能中添加以下行

function boot() {
  Schema::defaultStringLength(191);
}
于 2017-04-08T05:20:30.443 回答
0
  1. 添加使用 Illuminate\Support\Facades\Schema;到 App/Providers 文件夹中的 AppServiceProvider.php 文件。

  2. 添加 Schema::defaultStringLength(191); 到开机功能。

于 2018-02-20T08:04:34.610 回答
-1

如果 Laravel < 5.4 1. 在 Laravel 项目中找到 AppServiceProvider 2. 注释行或删除启动方法中的 Schema::defaultStringLength(191)

于 2017-09-20T08:12:55.793 回答