MySQLの文字コードをutf8mb4に変更


##環境
- AWS
- MySQL

##行ったこと
###デフォルト設定

まずはDBの文字コードの確認

```sql 
show variables like "chara%";
```


次にmysqlとクライアントのデフォルトの文字コードを設定する。

```/etc/my.conf
[mysqld]
...
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4
```

MySQLの再起動

```sql
/etc/init.d/mysqld restart
```

ここらへんまではQiitaで他の人も投稿をしているので、簡単に

### 既存のDBだった場合

#### テーブルの文字コード変更

確認をすると

```sql
use db_example;
show variables like "chara%";
```

```sql
+--------------------------+----------------------------+
| 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のままだった。

```sql
alter table テーブル名 default character set utf8mb4;
```
をすることでデフォルトの文字コードを変更することができる。

```
ALTER TABLE テーブル名 MODIFY カラム名 値 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```
カラムの文字列を変更をして確認をした。

```sql
show create table TWEET;

```
```sql
+----------------------------------------------------------------+
| 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 のテーブルができてしまうので。

#### やり方

```sql
ALTER DATABASE {DB名} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```
[MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.1.1 ALTER DATABASE 構文](https://dev.mysql.com/doc/refman/5.6/ja/alter-database.html)

##詰まったところ
既存のDBに対して、デフォルト設定(my.conf)の変更だけでは、
適用されなかったためハマった。

※既存のDBの文字コードを変える場合は、utf-8から変える場合は、文字化けは置きないが、
他の文字コードの場合は文字化けする可能性があるので注意。