Mysql2::Error at /auth/twitter/callback Incorrect string value:
MtSQLのエラーで、保存する値に絵文字![]()
![]()
が含まれていると起きる。
絵文字を扱うことが出来る文字コードはutf8mb4だがデータベースに設定されていた文字コードはutf8だった。それが原因。
MySQLに設定された文字コードを調べる
$ show variables like "chara%";
文字コードを変更する
MySQLのファイルはルートディレクトリの/etc/my.cnfにある。
$ vim my.cnf
以下のようにutf8をutf8mb4に変更と追記。
[mysqld]
(省略)
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
DBの再起動
$ systemctl restart mysqld.service
RailsAppのdatabase.ymlを編集
default: &default
adapter: mysql2
encoding: utf8mb4
pool: 5
username: root
password: <%= ENV['MYSQL2_PASSWORD'] %>
host: localhost
encoding:の部分をutf8mb4に変更する。
データベースの作り直し
私は既存のデータベースの文字コードを変更したので、データベースも今一度作り直す必要があった。
$ rails db:drop
$ rails db:create
$ rails db:migrate
当然ではあるが、格納していたデータはすべて消える。マイグレーションファイルは残っているためrails db:migrateすればモデルは直ぐに作り直せる。
参考