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
すればモデルは直ぐに作り直せる。
参考