2017-05-06 151 views
0

我使用laravel遷移在數據庫中創建表時遇到此問題。我不知道什麼可能是錯誤的,因爲我在以前的系統上使用了相同的命令。這是使用composer創建表格時發生的錯誤。laravel 5.4遷移工作不正常

$ php artisan migrate成功創建遷移表。

[Illuminate \ Database \ QueryException] SQLSTATE [42000]:語法錯誤 或訪問衝突:1071指定的密鑰太長;最大鍵 長度是767個字節(SQL:改變表users添加獨特 users_email_uniqueemail))

[PDOException] SQLSTATE [42000]:語法錯誤或訪問衝突: 1071指定的關鍵是噸oo的長;最大密鑰長度爲767個字節

回答

4

Laravel 5.4默認使用utf8mb4。解決這個錯誤的一種方法是默認回到utf8

轉到您的config\database.php並更改數據庫charsetuft8collationutf8_unicode_ci

'mysql' => [ 
    //.. 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    //.. 
], 
2

字符限制取決於你所使用的字符。 Laravel正在使用utf8mb4,其中最大索引的字符限制爲191

你只需要設置你的字符限制來糾正一個。從 Laravel Index Length

指數長度&的MySQL/MariaDB的閱讀

Laravel使用utf8mb4字符默認情況下,它包括用於在數據庫中存儲 「表情符號」 集的支持。如果您運行的是 版本比5.7.7釋放MySQL舊的或比 MariaDB年長的10.2.2的版本,你需要手動配置,以便通過遷移產生的默認 字符串長度爲MySQL爲他們創造 索引。您可以致電AppServiceProviderSchema::defaultStringLength方法來配置這樣的:

use Illuminate\Support\Facades\Schema; 

/** 
* Bootstrap any application services. 
* 
* @return void 
*/ 
public function boot() 
{ 
    Schema::defaultStringLength(191); 
} 

或者,你可以使你的 數據庫innodb_large_prefix選項。有關 如何正確啓用此選項的說明,請參閱數據庫文檔。

+0

它幫助感謝。 –