Laravel Lỗi: Specified key was too long khi migrate
Hi các bạn,
Laravel 5.x đã thay đổi bộ ký tự mặc định, bây giờ sẽ luôn luôn mặc định sử dụng charset là utf8mb4 (hỗ trợ có thể lưu lại được các kí tự emojis).
Với charset Utf8mb4, giới hạn varchar chỉ còn là 191 thay vì 255 khi ta dùng utf8.
Và như vậy, khi ta migrate mà trong table của ta có dùng method là ->string(‘…’), sẽ gặp ngay lỗi như sau:
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter tableusers
add uniqueusers_email_unique
([PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
Fix lỗi Specified key was too long
Rất đơn giản, các bạn chỉ cần vào file này: /app/Providers/AppServiceProvider.php và sửa hàm boot lại như sau:
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
Và sau đó bạn đã có thể migration lại bình thường, nếu như là migration lần đầu, hãy chạy php artisan migration:fresh nhé.
Chúc các bạn thành công!
Tìm hiểu thêm về utf8mb4 Mysql tại: https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
Tìm hiểu thêm Laravel tại: https://sethphat.com/sp-category/lap-trinh/laravel-5-php