只是前幾天駿妞兒玩 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