2017-04-01 285 views
0

當我用laravel 5.4運行migrate命令時我得到一個錯誤「specific key too long」,我搜索並發現很多人也面臨這個錯誤。常見的是在AppServiceProvider.php中加Schema::defaultStringLength(191);。但是文檔https://laravel-news.com/laravel-5-4-key-too-long-error表示它是針對那些比5.7.7更早版本的mysql版本。但是,我的版本是5.7.14(mysql Ver 14.14 Distrib 5.7.14, for Win64 (x86_64)),我已經設置MySQL的默認字符集來utf8mb4(show variables like "%char%"):Laravel 5.4 migrate key too long錯誤

enter image description here

所以我覺得我不需要改變什麼,但我仍然得到這個問題。這讓我感到困惑。誰能幫我?謝謝。

+0

您是否在遷移中定義了唯一的組合鍵? – dparoli

回答

0

我想你應該確保你已經設置了innodb_large_prefixOn。根據documentation它應該默認在Mysql> = 5.7.7,但也許你使用非標準設置。

1
  1. innodb_file_format=Barracuda
  2. 設置innodb_large_prefix=1
  3. 設置innodb_default_row_format=dynamic

步驟1(innodb_file_format)和2(innodb_large_prefix)適用於舊的MySQL版本,包括MariaDB的。我不知道這些的較低版本的界限。這些設置爲Mysql 5.7.7 changed the defaults,但它們較早存在。

第3步(innodb_default_row_format)需要Mysql 5.7.9或更高版本。

爲了文檔的緣故;如果您缺少innodb_default_row_format設置,解決方法是使用引擎innodb row_format=dynamic。這違反了Laravel將這個附加到CREATE TABLE語句而沒有任何轉義的事實,導致... ENGINE=innodb row_format=dynamic

Laravel 5.2.14 introduced the ability to specify the engine in config/database.php。如果您使用的是舊版本,則必須在每次創建表的遷移中指定此值。 $table->engine = 'innodb row_format=dynamic';