Laravel migration: Specified key was too long

В Laravel 5.4 кодировкой базы данных по умолчанию стала utf8mb4. Это повлияло на приложения, использующие MySQL v5.7.7 и меньше. Во время выполненния миграций, может вывалитсья ошибка Specified key was too long.

> php artisan migrate

  [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

В официальной документации описан этот случай в разделе Index Lengths & MySQL / MariaDB.

Laravel по-умолчанию использует кодировку utf8mb4, которая включает поддержку хранения «emojis» в базе данных. Если используется MySQL версии меньше 5.7.7 или MariaDB меньше 10.2.2, может потребоваться вручную настроить длину строки по умолчанию, сгенерированную миграциями, чтобы MySQL создала для них индексы. Для этого надо вызвать метод Schema::defaultStringLength в файле AppServiceProvider.php

use Illuminate\Support\Facades\Schema; // <-- Вот это добавить

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Schema::defaultStringLength(191); // <-- И вот это
}

Похожие записи

Laravel. Catch FindOrFail Exception

use Illuminate\Database\Eloquent\ModelNotFoundException;
...
try {
  $publication = Publication::findOrFail($id);
} catch (ModelNotFoundException $ex) {
  // Error handling code
}
22 декабря 2017 г. в Laravel