2017-02-08 2 views
1

Во-первых, я получаю сообщение об ошибке вПризыв к неопределенным метод Осветите Database Схемы 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, чтобы исправить это как

use Illuminate\Support\Facades\Schema; 

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

После добавления этого, п я бегу

php artisan optimize 

тогда я представил с новой ошибки, как показано ниже

Call to undefined method Illuminate\Database\Schema\MySqlBuilder::defaultStringLength()

Пожалуйста помогите избавиться от всех этих ошибок.

+0

Какова ваша версия для laravel? –

ответ

2

defaultStringLength представлено в Laravel v5.4. Reference.

Вы можете обновить версию Laravel

ИЛИ

Вы определяете длину как $table->string('coumname', 255); Вы не можете указать более 255. Если оставить параметр длины будет назначать 255 по умолчанию

0

Найти AppServiceProvider в Laravel Project

1.First Добавить Фасад

use Illuminate\Support\Facades\Schema; 

2.Add Ниже строки в функции загрузки

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

Это потому, что Laravel 5.4 использует набор символов utf8mb4 по умолчанию, который включает в себя поддержку для хранения «emojis» в базе данных. Вы можете выбрать любой из этих 2-х решений:

1) Изменение

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

в

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

2) Редактировать AppServiceProvider находится в App \ Провайдеры \ AppServiceProvider.php и добавьте следующую строку метод boot() и загрузить фасад схемы:

use Illuminate\Support\Facades\Schema; 

/** 
* Bootstrap any application services. 
* 
* @return void 
*/ 
public function boot() 
{ 
    Schema::defaultStringLength(191); 
} 

Что именно будет делать, это фактически изменить максимальный максимум по умолчанию fi длины в базе данных и фактически сократить максимальную длину строки от 255 до максимум 191 символа (utf8 использует 3 байта на символ, в то время как utf8mb4 использует 4 байта на символ, ваше поле теперь может содержать на 25% меньше символов 255 * 75% = 191,25). Так что, если вы не установите строковое поле вручную в миграции новое значение по умолчанию будет 191.

-1

Если Laravel < 5,4 1. Найти AppServiceProvider в Laravel проекта 2.Строка комментария или удалить Schema :: defaultStringLength (191) в методе загрузки

0
  1. Добавить использовать ILLUMINATE \ Support \ \ Фасады схемы; в файл AppServiceProvider.php в папке «Приложения/Провайдеры».

  2. Add Schema :: defaultStringLength (191); к функции загрузки.

Смежные вопросы