Hola a todos!,

Laravel 5.4 en si trae muchas mejoras y cambios beneficiosos para todos quienes lo utilizamos, pero en mi caso este error me ha pasado en más de una oportunidad al querer ejecutar cualqueira de estos dos comandos:

php artisan migrate
php artisan migrate --seed

Error que muestra

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

Existen 2 soluciones, en la primera oportunidad me funcionó la opción 1, pero en otro proyecto simplemente no me sirvió de nada así que la opción 2 llego a salvarme 😀

Opción 1:

Esta primera opción nos la dan directamente en la documentación de Laravel como puden ver en el link o en la imagen inferior:

Solución laravle utf8mb4

Ir al archivo AppServiceProvider.php, ubicado en:

app/Providers/AppServiceProvider.php

y en la función boot debemos agregar la siguiente línea

Schema::defaultStringLength(191);

quedando finalmente así:

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

Opción 2:

Para esta opción debemos editar la configuración de Laravel para MYSQL en el archivo database.php ubicado en:

config/database.php

una vez allí buscaremos la opción de mysql y debemos cambiar los valores de charset y collation

'mysql' => [
    'charset' => 'utf8mb4',
    'collation'=>'utf8mb4_unicode_ci',
]

por lo siguiente:

'mysql' => [
    'charset' => 'utf8',
    'collation'=>'utf8_unicode_ci',
]

al menos a mi me han funcionado a la perfección, intenten la primera, si no les funciona hagan la segunda y problema resuelto! 😀

Más Información de el problema:

El problema se debe a que el character set se cambio por utf8mb4 lo que permite almacenar emojis, lo cual solo esta soportado desde MYSQL en su versión 5.7.7 por lo que si su versión es menor les saldrá el problema asi que ya saben!

Espero le sirva a más de alguien 😀