Como puede ver en el mensaje de error:"El tamaño máximo de columna es de 767 bytes", si desea crear un índice en él. Un VARCHAR(255)
la columna puede tomar hasta 765 (255*3) bytes usando utf8
y 1020 (255*4) bytes usando utf8mb4
. Esto se debe a que en MySQL utf8
ocupa hasta 3 bytes y utf8mb4
hasta 4 bytes (el UTF8 real). Creando así un VARCHAR(255)
índice (único) con utf8mb4
fallará.
Estas son sus opciones para solucionar el problema:
Establecer intercalación predeterminada en my.ini
:
collation_server=utf8_unicode_ci
character_set_server=utf8
Establezca la intercalación predeterminada para la base de datos al crear:
CREATE DATABASE IF NOT EXISTS `your_db` COLLATE 'utf8_unicode_ci'
Establezca la intercalación predeterminada para la tabla/columna. (No lo recomiendo)
Cambie el tamaño de la columna a 190 (varchar(190)
) o menos.
Corrección de Laravel 5.4
La configuración del servidor Mysql se sobrescribe con el comando de migración de Laravel. Establecerá la intercalación y el conjunto de caracteres a la versión de la configuración.
Cambia los campos charset
y collation
del motor db en el archivo de configuración de la base de datos ubicado en config/database.php
.
..
'mysql' => [
'driver' => 'mysql',
'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', ''),
//'charset' => 'utf8mb4',
//'collation' => 'utf8mb4_unicode_ci',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
..