Laravel + MySQLで絵文字がinsertに失敗したときの対処法

  • 2020年9月9日
  • 2020年9月9日
  • Laravel

LaravelでTwitterログインできるサイトを作成した、という内容を以前ブログで書きましたが、このサイトのデバッグをしたところ、一部のTwitterアカウントでログインした際にエラーになる時があることがわかりました。

Illuminate \ Database \ QueryException (HY000)
SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF0\x9F\x93\xB7 \xE5...' for column 'description' at row 1 (SQL: insert into `users` ...

それらのアカウントに共通していたのは、名前やプロフィールに絵文字を使用していたこと。

実はLaravel側から絵文字を含む文字列をインストールする際、/config/database.phpのmysqlドライバの設定を変更する必要があるようです。

🚨Laravel 絵文字が通らない問題 – Error Search

エラーが発生した際にmysqlドライバに指定されていた文字コードの設定は下記のようになっていました。

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

一方上記の記事では、下記の文字コード設定に変更すると改善されたとの記述があります。

'mysql' => [
                ...省略...
		'collation' => 'utf8mb4_general_ci',
		'charset' => 'utf8mb4',
                ...省略...
],

試したところ、確かにエラーが出なくなり、無事絵文字が含まれた文字列もインサートできました。

SNSログインに対応して、ユーザー情報も取得する場合は必須となるので、注意したいポイントです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG