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