【问题标题】:Call to undefined method Illuminate\Database\Schema\MySqlBuilder::defaultStringLength()调用未定义的方法 Illuminate\Database\Schema\MySqlBuilder::defaultStringLength()
【发布时间】:2017-06-25 14:41:38
【问题描述】:

首先我遇到了一个错误

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

请协助消除所有这些错误。

【问题讨论】:

  • 你的 laravel 版本是什么?

标签: php laravel-5 laravel-artisan artisan-migrate


【解决方案1】:

defaultStringLength 在 Laravel v5.4 中引入。 Reference.

你可以更新 Laravel 版本

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

【讨论】:

    【解决方案2】:

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

    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。

    【讨论】:

      【解决方案3】:

      在 Laravel 项目中查找 AppServiceProvider

      1.首先添加门面

      use Illuminate\Support\Facades\Schema;
      

      2.在boot函数中添加下面几行

      function boot() {
        Schema::defaultStringLength(191);
      }
      

      【讨论】:

        【解决方案4】:
        1. 添加使用 Illuminate\Support\Facades\Schema;到 App/Providers 文件夹中的 AppServiceProvider.php 文件。

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

        【讨论】:

          【解决方案5】:

          如果 Laravel

          【讨论】:

            猜你喜欢
            • 2019-09-28
            • 2014-12-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-23
            • 1970-01-01
            • 2020-01-04
            • 2021-10-18
            相关资源
            最近更新 更多