Laravel 5.4 - 5.5, и ошибка Specified key was too long

Базы данных Настройка Ошибки Разработка

Автор: ACym.ru - March 29, 2017 7:18 pm

Попытка запустить миграции приводит к возникновению ошибки "Слишком длинный ключ"

С выходим в свет Laravel версии 5.4, изменились базовые требования к серверу для установки Laravel.

В частности, необходимо, чтобы сервер баз данных MySQL был версии не ниже 5.7.7.

Если это не так, то при попытке запуска миграций возникает ошибка:

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))

[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

На бегу менять девелоперский сервер - не очень хорошая идея.

Поэтому избавляемся от ограничений и указанной ошибки.

ПЕРВЫЙ СПОСОБ

Открываем файл App\Providers\AppServiceProvider.php, и в пустом по умолчанию методе boot() прописываем

Schema::defaultStringLength(191);

Для того, чтобы не возникло дополнительных ошибок, сразу указываем, откуда берем класс Schema:

Illuminate\Support\Facades\Schema::defaultStringLength(191);

Естественно, удобнее вставить использование схемы в начале файла, и убрать указание на путь из метода boot(). В результате, получим вот такой кусок кода, который позволяет избавиться от ошибки обращения к базе данных при запуске миграций:

use Illuminate\Support\Facades\Schema;

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

ВТОРОЙ СПОСОБ

Заставить сайт работать можно и другим способом: изменив 2 строки в конфигурационном файле, отвечающем за подключение к базе данных.

В версии Laravel 5.4 в конфигурационном файле config\database.php находим строки:

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

Меняем их на следующие:

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

Т.е. удаляем mb4.

После этого можно работать с приложением.

На этом все, делитесь своими записками по работе с Laravel на LaraNotes.ru

Ваш
Андрей Кимвр