Laravel 5.4 常見錯誤:Specified key was too long

JokerLinly發表於2017-03-20

file
只是前幾天駿妞兒玩 5.4 的時候就遇到這個問題了~~

Laravel 5.4 把預設資料庫字符集更改成 utf8mb4,作為對儲存 emojis 的支援。只要你執行的是 MySQL v5.7.7 及更高版本,那麼你就不會出現本文提到的錯誤。

對於那些執行 MariaDB 或舊版本的 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

如 Laravel 5.4 中關於 遷移 的文件,你要做的是編輯 AppServiceProvider.php 檔案,並在 boot 方法內設定預設字串的長度:

use Illuminate\Support\Facades\Schema;

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

然後,就沒然後了。


Tips (2017 年 4 月 6 日):

Schema::defaultStringLength(191); 是設定好的預設的字串長度,也就是說,遷移中的欄位沒有設定長度的話,varchar 欄位會被預設成長度只有 191 哦!

參考連結:https://laravel-news.com/laravel-5-4-key-too-long-error

Stay Hungry, Stay Foolish.

相關文章