エラーメッセージでわかるように、インデックスを作成する場合は、「最大列サイズは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,
],
..