mysqlの文字指定がおかしいと本番環境でデータベースに値が保存されなくなる

やりたい事

本番環境でデータベースに値を保存できるようにしたい

今回の原因

サーバー側の文字コードがずれている

手順

サーバー側で現状確認

サーバー側のターミナルで
mysql -u root -p でデータベースを見に行く

パスワードを打ち込む(パスワードは/etc/environment にあるかな)

show variables like "chara%"; これでサーバー側のデータベースの文字コードを確認
もしくわuseを使って問題のあるデータベースまで移動してから実行

 [ec2-user@ip-123-45-67-89 ~]$ mysql -u root -p
 Enter password: 
 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 123
 Server version: 5.6.44 MySQL Community Server (GPL)
 

 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
 

 Oracle is a registered trademark of Oracle Corporation and/or its
 affiliates. Other names may be trademarks of their respective
 owners.
 

 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
 mysql> show variables like "chara%";
 +--------------------------+------------------------------+
 | Variable_name            | Value                        |
 +--------------------------+------------------------------+
 | character_set_client     | utf8                         |
 | character_set_connection | utf8                         |
 | character_set_database   | latin1   こいつが怪しい         |
 | character_set_filesystem | binary                       |
 | character_set_results    | utf8                         |
 | character_set_server     | utf8                         |
 | character_set_system     | utf8                         |
 | character_sets_dir       | /usr/share/mysql56/charsets/ |
 +--------------------------+------------------------------+
 8 rows in set (0.01 sec) 

character_set_database が怪しい。これをutf8にする必要がある。

/etc/my.cnf に書き込む

 [mysqld]
 character-set-database=utf8 変更する記述
 
 [client]
 default-character-set=utf8 クライエント側も

exitして内容を保存する

書き込んだ後は内容を保存するために、サーバー側からexitしましょう。

変更したいデータベースをdropしてcreate

useを使ってデータベースを指定して、drop、createしましょう
 mysql -u root -p 
show databases; サーバー側にあるデータベースを確認

drop database 削除するデータベース名;

create database 作成するデータベース名;

mysqld を再起動

sudo service mysqld stop 停止
sudo service mysqld start 起動

restartでも良いが、stop,startがお勧め

最後に確認

mysql> use try_production;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 

 Database changed こうなればオーケイ

 mysql> show variables like "chara%";
 +--------------------------+------------------------------+
 | Variable_name            | Value                        |
 +--------------------------+------------------------------+
 | character_set_client     | utf8                         |
 | character_set_connection | utf8                         |
 | character_set_database   | utf8      変わってる!           |
 | character_set_filesystem | binary                       |
 | character_set_results    | utf8                         |
 | character_set_server     | utf8                         |
 | character_set_system     | utf8                         |
 | character_sets_dir       | /usr/share/mysql56/charsets/ |
 +--------------------------+------------------------------+
 8 rows in set (0.00 sec)
 
 

これで正しく動作するはず!

なぜここが変わるのかわかりませんが、utf8じゃないと日本語対応してないっぽいね。