Выполнение запроса,
INSERT INTO table (ref_id, user_id, role_id, text)
VALUES (233, 3, 40, 'Hdhdhdh????hzhzhzzhjzj 我爱你 ❌')
отлично работает в Sequel Pro, но при использовании eloquent выдает ошибку,
"SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF0\x9F\x98\x9C\xF0\x9F...' for column 'text' at row 1 (SQL: INSERT INTO table (ref_id, user_id, role_id, text) VALUES (233, 3, 40, 'Hdhdhdh????hzhzhzzhjzj 我爱你 ❌')"






Laravel по умолчанию использует utf8 в качестве кодировки для MySQL. В MySQL символ UTF8 имеет длину до 3 байтов (utf8 — это псевдоним для utf8mb3). Принимая во внимание, что символы Emoji имеют длину до 4 байтов.
Поэтому нам нужно использовать utf8mb4 в качестве нашей кодировки.
1. Откройте свой config/database.php
2. Найдите раздел MySQL:
'mysql' => [
'driver' => 'mysql',
[...]
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
[....]
3. Измените кодировку и сопоставление на utf8mb4 и utf8mb4_unicode_ci соответственно:
'mysql' => [
'driver' => 'mysql',
[...]
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
[....]
4. Сохраните и сбросьте базу данных:
Обратите внимание, что если вы сбросите базу данных, все ваши данные будут стерты!
php artisan migrate:reset
Может в драйвере неправильный набор символов?