Specified key was too long
Escenario
Despliegue de una app de laravel en un servidor. Ejecutamos el primer migrate y zas.
php artisan migrate
...
Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
...
No nos asustemos; el tema está en una diferencia de versión MySQL
ATENCIÓN a programadores cada vez las diferencias entre versiones de un mismo motor son fuertes (MySQL 5.X vs MySQL 8, por ejemplo), MySQL vs MariaDB vs Percona. Algunas pueden producir serios problemas en caso de tener que recuperar un backup de otro motor o versión, o una configuración.
Posibles soluciones
Actualización del motor de Base de Datos
Si es posible lo adecuado, es que uses el mismo motor tanto en desarrollo, testing y producción. Y la misma configuración.
Tener apps profesionales, en un entorno compartido, es como ser un feriante (con respeto a su profesión). Sufriras, tu tienda o negocio no tendrá el aspecto que tendrías en un servidor dedicado o VPS, optimizado para tu negocio
Modificación del engine en tu app
Si te es imposible o no quieres actualizar tu monotr de bases de datos, intenta modificar el engine de mysql en el archivo config/database.php
'mysql' => [
'driver' => 'mysql',
...
'engine' => 'InnoDB,
...
],
Modificación del AppServiceProvider
Si no te funciona la anterior, puede agregar una linea en tu fichero app/Providers/AppServiceProvider.php
...
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
...
public function boot()
{
Schema::defaultStringLength(191);
}
Explicación
La naturaleza del problema es debido a que por defecto Laravel usa como codificación utf8mb4, con soporte para los emojis.
Enlaces y cosas sobre el tema
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
No Comments