#環境
$ docker -v
Docker version 19.03.12
$ rails -v
Rails 6.0.3.2
$ mysql --version
mysql Ver 14.14 Distrib 5.7.29, for osx10.15 (x86_64) using EditLine wrapper
#データベースに日本語でユーザー名を登録しようとすると、、、、
エラー内容
ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value: '\xE3\x83\x8F\xE3\x83\xAA...' for column 'name' at row 1):
あらら、日本語として認識されてない模様
ここは、データベースのcharasetでも見て設定確認しますか。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f51c4b953b05 feeder-in_back "rails server -b 0.0…" About an hour ago Up About an hour 0.0.0.0:3000->3000/tcp back
925b28f3b58d mysql:5.7 "docker-entrypoint.s…" About an hour ago Up About an hour 33060/tcp, 0.0.0.0:3308->3306/tcp database
ab6efeba59a1 feeder-in_web "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:8080->3000/tcp web
$ docker exec -it 925b28f3b58d mysql -u root -p
mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.03 sec)
character_set_database | latin1
これを見る限り、MySQLのデフォルトのcharasetになっており、日本語対応になっていない。
#MySQLデータベースサーバを日本語対応にする
docker-compose.yml
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
$ docker-compose down
$ docker-compose up -d --build
#データベースの再構築
database.yml
default: &default
charset: utf8mb4 #追記
encoding: utf8mb4
$ docker-compose exec back sh
> rake db:drop
> rake db:create
> rails db:migrate
これで日本語対応のデータベースになった!