2017-03-03 55 views
0

我在使用laravel migrate命令時遇到問題。它顯示:Laravel 5.4:指定的密鑰太長錯誤

SQLSTATE [42000]:語法錯誤或訪問衝突:1071指定的鍵 太長;最大密鑰長度爲1000個字節(SQL:ALTER TABLE users 添加獨特users_email_uniqueemail))

但我的MySQL版本是5.7.14,我的字符集是:

mysql> show variables like "%char%"; 
+--------------------------+-------------------------------------------------+ 
| Variable_name   | Value           | 
+--------------------------+-------------------------------------------------+ 
| character_set_client  | utf8mb4           | 
| character_set_connection | utf8mb4           | 
| character_set_database | utf8mb4           | 
| character_set_filesystem | binary           | 
| character_set_results | utf8mb4           | 
| character_set_server  | utf8mb4           | 
| character_set_system  | utf8           | 
| character_sets_dir  | D:\wamp64\bin\mysql\mysql5.7.14\share\charsets\ | 
+--------------------------+-------------------------------------------------+ 

,所以應該不會正如doc所說的那樣是任何問題。有人可以幫助我嗎?

回答

2

錯誤消息中提到的1000 bytes指向的存儲引擎是MyISAM而不是InnoDB。與5.7.7中的密鑰長度相關的MySql更改特定於InnoDB引擎。

您需要將表移動到InnoDB存儲引擎,或者如果您必須使用MyISAM,則需要使用Schema::defaultStringLength(191);語句in the documentation

// AppServiceProvider 

use Illuminate\Support\Facades\Schema; 

public function boot() 
{ 
    Schema::defaultStringLength(191); 
} 
+0

這工作得很好。 – DengDeng

4

你不會得到對MySQL 5.7.7或以上的最新版本的任何錯誤,但低於版本在任何laravel版本,你需要添加一行到您放置在app/Providers/AppServiceProvider.php

您文件AppServiceProvider.php需要更新象下面這樣:

public function boot() 
{ 
    Schema::defaultStringLength(191); 
} 

請不要忘記添加行

use Illuminate\Support\Facades\Schema; 

位於文件的頂部。

與下面的博客的參考: https://laravel-news.com/laravel-5-4-key-too-long-error

相關問題