Laravel Lỗi: Specified key was too long khi migrate

Laravel Lỗi: Specified key was too long khi migrate

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 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

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

facebook
Seth Phát

Seth Phát

Mình là Phát - biệt danh Seth Phát. Hiện đang là một Sr. Full-Stack Engineer. Mình là một người yêu thích và đam mê lập trình và hiện tại đang theo về phần Web là chủ yếu. Mạnh Back-end và khá Front-end, vẫn đang theo đều cả 2 :v. Còn gì bằng khi được làm những thứ mà mình yêu thích, đam mê ;)

Bình luận qua Facebook