Skip to main content

Исправляем ошибку в Laravel: Specified key was too long

Я думаю многие из вас сталкивались с ошибкой при попытке запуска миграций в Laravel. Дело в том, что начиная с версии 5.4, Laravel использует другой набор символов для базы данных, а именно utf8m4 который поддерживает emoji (ну куда же без них). Однако, если вы используете в качестве движка базы данных MySQL v5.7.7 и выше, то все у вас будет работать из коробки, ничего делать не нужно.

А вот если версия MySQL ниже или же вы используете MariaDB (Привет пользователи XAMPP), при попытке запустить миграцию, вы получите примерно такую ошибку:

Migration table created successfully.

In Connection.php line 664:
                                                                                                                       
  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`))                                                     
                                                                                                                       

In Connection.php line 458:
                                                                                                                   
  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

Исправить такую ошибку на удивление очень легко. Открываем в редакторе файл app/Providers/AppServiceProvider.php. Внутри метода boot задаем длинну строки по умолчанию, вот так:

use Illuminate\Support\Facades\Schema;

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

Пробуем опять запустить миграции и всё должно работать.

4 thoughts to “Исправляем ошибку в Laravel: Specified key was too long”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *