Như bạn có thể thấy trong thông báo lỗi - "Kích thước cột tối đa là 767 byte", nếu bạn muốn tạo chỉ mục trên đó. A VARCHAR(255)
cột có thể chiếm tới 765 (255 * 3) byte bằng cách sử dụng utf8
và 1020 (255 * 4) byte sử dụng utf8mb4
. Điều này là do trong MySQL utf8
chiếm tối đa 3 byte và utf8mb4
tối đa 4 byte (UTF8 thực). Do đó, tạo một VARCHAR(255)
(duy nhất) chỉ mục với utf8mb4
sẽ thất bại.
Đây là các tùy chọn của bạn để khắc phục sự cố:
Đặt đối chiếu mặc định trong my.ini
:
collation_server=utf8_unicode_ci
character_set_server=utf8
Đặt đối chiếu mặc định cho cơ sở dữ liệu khi tạo:
CREATE DATABASE IF NOT EXISTS `your_db` COLLATE 'utf8_unicode_ci'
Đặt đối chiếu mặc định cho bảng / cột. (Tôi không khuyến khích điều đó)
Thay đổi kích thước cột thành 190 (varchar(190)
) hoặc ít hơn.
Sửa lỗi Laravel 5.4
Cấu hình máy chủ Mysql bị ghi đè bởi lệnh di chuyển của Laravel. Nó sẽ đặt đối chiếu và bộ ký tự thành phiên bản của cấu hình.
Thay đổi các trường charset
và collation
của công cụ db trong tệp cấu hình cơ sở dữ liệu nằm trong config/database.php
.
..
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
//'charset' => 'utf8mb4',
//'collation' => 'utf8mb4_unicode_ci',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
..