Вставка операторов работает при вставке смайликов, но выдает ошибку при использовании eloquent - PullRequest
5 голосов
/ 24 мая 2019

Выполнение запроса,

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 我爱你 ❌')"

1 Ответ

3 голосов
/ 24 мая 2019

Причина проблемы:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...