插入表情符号时,插入语句有效,但使用雄辩时,会引发错误

时间:2019-05-24 15:28:33

标签: php mysql laravel eloquent

运行查询,

INSERT INTO table (ref_id, user_id, role_id, text) VALUES (233, 3, 40, 'Hdhdhdhhzhzhzzhjzj 我爱你 ❌')

在Sequel Pro中工作正常,但是当雄辩地使用时,会引发错误,

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

1 个答案:

答案 0 :(得分:3)

问题:

默认情况下,Laravel使用utf8作为MySQL的字符集。在MySQL中,UTF8字符最多3个字节长(utf8utf8mb3的别名)。而表情符号字符最长为4个字节。

因此,我们需要使用utf8mb4作为字符集。

解决方案:

1。打开您的config/database.php

2。找到MySQL部分:

'mysql' => [
    'driver' => 'mysql',
    [...]
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    [....]

3。将字符集和排序规则分别更改为utf8mb4utf8mb4_unicode_ci

'mysql' => [
    'driver' => 'mysql',
    [...]
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    [....]

4。保存并重置数据库:

请注意,如果您重置数据库,则所有数据都将被清除!

  

php artisan migration:reset