Solucionar error «1071 Specified key was too long / max key length is 767 bytes»

Share on facebook
Facebook
Share on twitter
Twitter
Share on email
Email

Laravel realizó un cambio en el conjunto de caracteres predeterminado de la base de datos, y ahora es utf8mb4 que incluye soporte para almacenar emojis. Si está ejecutando una versión de MySQL anterior a la versión 5.7.7 o MariaDB anterior a la versión 10.2.2, es posible que deba configurar manualmente la longitud de cadena predeterminada generada por las migraciones para que MySQL cree índices para ellos.

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

Como se describe en la guía de migraciones para solucionar esto, todo lo que tiene que hacer es editar su archivo app/Providers/ApppServiceProvider.php y agregar las siguientes cadenas:

use Illuminate\Support\Facades\Schema;

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

Alternativamente, puede habilitar la opción innodb_large_prefix para su base de datos, editando el archivo config/database.php y modificando el valor de engine.

'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

Podría Interesarte

Crear paquete para Laravel con composer

Una de las ventajas de Laravel es que podemos escribir bibliotecas donde simplemente podemos llamar a sus servicios sin preocuparnos de cómo se implementó. Podemos reutilizar estas bibliotecas y administrarlas por separado del código fuente principal de nuestro proyecto y a estas bibliotecas en Laravel se les llaman paquetes.

Verificación por Correo en Laravel

Verificar que el usuario es una persona real cada día es mas necesario y la verificación por correo nos brinda cierta seguridad de esto.