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