開発環境にdockerを導入し、docker-compose up
をした後にログインをしようとしたところエラーが発生。データベースに接続できなくなってしまったので、その時の対処法を記録として残します。
エラー内容
ActiveRecord::StatementInvalid (Mysql2::Error: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='):
latin1という文字コードとutf8という文字コードが混在していることが原因で起きているエラーのようです。
本当に混在しているか確認するため、こちらの記事を参考にDocker上でMySQLにログインしてみました。
確認してみるとlatin1とutf8が混在しているのが分かります。
そしてlatin1という文字コードは日本語を扱うことができないためこれをutf8に変更する必要があります。
解決方法
docker-compose.yml
を以下のように変更しました。(こちらの記事、およびdockerhub内mysqlの 公式リファレンス参照)
docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
↓↓↓# 文字コードをutf8に指定 この1行を追加する↓↓↓
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
environment:
MYSQL_USER: root
MYSQL_PASSWORD:
# 仮想コンテナにアクセスするためのポート番号
ports:
- "3306:3306"
# データを永続化する(ホスト側のdb/mysql/volumesをコンテナ側の/var/lib/mysqlに同期する)
volumes:
- mysql-data:/var/lib/mysql
dbにcommandを追加することで文字コードの設定を渡せます。
再度dockerを立ち上げたところエラーが起きることなく、無事問題は解決しました!
最後に
dockerを始めたばかりの初心者でわからないところがわからない状態ですが、1歩づつ進んでいきます!!