[RAILS] [MySQL] Le serveur de base de données construit avec docker peut ne pas prendre en charge le japonais ...

environnement

python


$ 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

Lorsque j'essaye d'enregistrer un nom d'utilisateur en japonais dans la base de données, ...

contenu de l'erreur


ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value: '\xE3\x83\x8F\xE3\x83\xAA...' for column 'name' at row 1):

Oh, il semble que ce ne soit pas reconnu comme japonais Voulez-vous vérifier les paramètres en regardant le jeu de caractères de la base de données?

python


$ 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 Pour autant que je puisse voir, c'est le jeu de caractères par défaut de MySQL, et il ne prend pas en charge le japonais.

Faire en sorte que le serveur de base de données MySQL supporte le japonais

docker-compose.yml


command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

python


$ docker-compose down

$ docker-compose up -d --build

Reconstruire la base de données

database.yml


default: &default
  charset: utf8mb4   #Postscript
  encoding: utf8mb4  

python


$ docker-compose exec back sh
> rake db:drop

> rake db:create
> rails db:migrate

Vous avez maintenant une base de données japonaise!

Recommended Posts

[MySQL] Le serveur de base de données construit avec docker peut ne pas prendre en charge le japonais ...
Application Web construite avec docker (1)
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
Lire le fichier de vidage avec MySQL de Docker
[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
Mettre à jour MySQL de 5.7 à 8.0 avec Docker
J'ai construit un environnement de rails avec docker et mysql, mais j'étais malade
Comment interagir avec un serveur qui ne plante pas l'application
Après tout, je voulais prévisualiser le contenu de mysql avec Docker ...