Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como corrigir MySql:tamanho da coluna do índice muito grande (migração do Laravel)


Como você pode ver na mensagem de erro - "O tamanho máximo da coluna é 767 bytes", se você quiser criar um índice nela. Um VARCHAR(255) coluna pode levar até 765 (255*3) bytes usando utf8 e 1020 (255*4) bytes usando utf8mb4 . Isso ocorre porque no MySQL utf8 leva até 3 bytes e utf8mb4 até 4 bytes (o UTF8 real). Criando assim um VARCHAR(255) (único) índice com utf8mb4 vai falhar.

Estas são suas opções para corrigir o problema:

Defina o agrupamento padrão em my.ini :
collation_server=utf8_unicode_ci
character_set_server=utf8

Defina o agrupamento padrão para o banco de dados ao criar:
CREATE DATABASE IF NOT EXISTS `your_db` COLLATE 'utf8_unicode_ci'

Defina o agrupamento padrão para a tabela/coluna. (não recomendo)

Altere o tamanho da coluna para 190 (varchar(190) ) ou menos.

Correção do Laravel 5.4


A configuração do servidor Mysql é substituída pelo comando migration do Laravel. Ele definirá o agrupamento e o conjunto de caracteres para a versão da configuração.

Altere os campos charset e collation do mecanismo db no arquivo de configuração do banco de dados localizado em 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,
        ],
..