Laravel常見錯誤問題Specified key was too long

Laravel 5.4 把默認数據庫字符集更改成utf8mb4,只要你使用的MySQL是5.7.7或更高版本下,執行該命令時就不會出現錯誤。

對於使用舊版本的MySQL,在執行命令時就會有如下錯誤訊息。

Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))

PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes")

需要解決此問題,需要在AppServiceProvider.php文件內,在boot方法內增加如下程式碼設置默認字符串的長度。

use Illuminate\Support\Facades\Schema;

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

Schema::defaultStringLength(191);是設置好的默認的字符串長度,代表遷移中的欄位沒有設置長度的時候,varchar的欄位會被默認長度為191。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

驗證碼 * Time limit is exhausted. Please reload CAPTCHA.

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料