##環境
- AWS
- MySQL
##行ったこと
###デフォルト設定
まずはDBの文字コードの確認
show variables like "chara%";
次にmysqlとクライアントのデフォルトの文字コードを設定する。
/etc/my.conf
[mysqld]
...
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
MySQLの再起動
/etc/init.d/mysqld restart
ここらへんまではQiitaで他の人も投稿をしているので、簡単に
既存のDBだった場合
テーブルの文字コード変更
確認をすると
use db_example;
show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb4 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
もともとDBができていたので、
databaseの文字コードだけ、utf-8のままだった。
alter table テーブル名 default character set utf8mb4;
をすることでデフォルトの文字コードを変更することができる。
ALTER TABLE テーブル名 MODIFY カラム名 値 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
カラムの文字列を変更をして確認をした。
show create table TWEET;
+----------------------------------------------------------------+
| Table | Create Table
+----------------------------------------------------------------+
| TWEET | CREATE TABLE `POST` (
`POST_ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT,
`POST_TEXT` varchar(255) NOT NULL COMMENT,
`POST_DATE_TIME` datetime NOT NULL COMMENT,
`USER_ID` bigint(20) NOT NULL COMMENT,
PRIMARY KEY (`TWEET_ID`),
KEY `FK_POST_USER` (`USER_ID`),
CONSTRAINT `FK_POST_USER` FOREIGN KEY (`USER_ID`) REFERENCES `USER` (`USER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=166 DEFAULT CHARSET=utf8mb4
+---------------------------------------------------------------+
1 row in set (0.00 sec)
DBの文字コード変更
※追記しました ご指摘ありがとうございます
変更する理由
新たにテーブルを追加するときに、DEFAULT CHARSET=utf8mb4 を指定し忘れると、DEFAULT CHARSET=utf8 のテーブルができてしまうので。
やり方
ALTER DATABASE {DB名} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.1.1 ALTER DATABASE 構文
##詰まったところ
既存のDBに対して、デフォルト設定(my.conf)の変更だけでは、
適用されなかったためハマった。
※既存のDBの文字コードを変える場合は、utf-8から変える場合は、文字化けは置きないが、
他の文字コードの場合は文字化けする可能性があるので注意。