sql >> データベース >  >> RDS >> Mysql

MySqlを修正する方法:インデックス列のサイズが大きすぎます(Laravelの移行)

    エラーメッセージでわかるように、インデックスを作成する場合は、「最大列サイズは767バイトです」。 VARCHAR(255) utf8を使用すると、列に最大765(255 * 3)バイトを使用できます。 およびutf8mb4を使用した1020(255 * 4)バイト 。これは、MySQLではutf8 最大3バイトでutf8mb4 最大4バイト(実際のUTF8)。したがって、VARCHAR(255)を作成します (一意の)utf8mb4のインデックス 失敗します。

    問題を解決するためのオプションは次のとおりです。

    my.iniでデフォルトの照合を設定します :

    collation_server=utf8_unicode_ci
    character_set_server=utf8
    

    作成時にデータベースのデフォルトの照合を設定します:

    CREATE DATABASE IF NOT EXISTS `your_db` COLLATE 'utf8_unicode_ci'
    

    テーブル/列のデフォルトの照合を設定します。 (お勧めしません)

    列サイズを190に変更します(varchar(190) )以下。

    Laravel5.4の修正

    Mysqlサーバーの構成は、Laravelの移行コマンドによって上書きされます。照合と文字セットを構成のバージョンに設定します。

    フィールドcharsetを変更します およびcollation config/database.phpにあるデータベース設定ファイルのdbエンジンの 。

    ..
    '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,
            ],
    ..
    


    1. CSVファイルをmysqlデータベースに保存します

    2. PHPでのデータの早期終了エラー

    3. PostgreSQLデータベースの操作方法

    4. INSERT IGNORE vs INSERT ... ON DUPLICATE KEY UPDATE