【備忘録】MySQLで文字化け（RDS）


#テーブルの日本語が文字化けしてしまう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619839/2bdeb5e1-e6f8-4c4e-8ec6-9bc6132f5a7f.png)

原因はMySQL(RDS)にあります。
RDSのパラメーターグループでDBで利用するキャラクターセットを設定しているようです。
-character_set_client
-character_set_connection
-character_set_database
-character_set_results
-character_set_server

しかし、既にDBに設定されたパラメーターグループはAWSからは変更できないようです。
なので以下の方法で変更する！


#まずDBに設定されているパラメーターの確認

```
show variables like 'character_set%';
```
「character_set_database」には「latin1」が使用されています。
これを「utf8」に変更する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619839/9e8c438c-e1cf-8acb-6a63-7c558217652d.png)


#テーブルに設定されているキャラクターセットの確認
すでに作成されているテーブルにもキャラクターセットの設定が行われているようです。
以下のコマンドで確認しましょう。

```
show create table テーブル名;
```
「latin1」が使用されているみたいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619839/5bf55f3d-45e2-3aa5-f763-b9b7759e7851.png)


#キャラクターセットの設定変更
以下のコマンドを実行してください。

```
ALTER DATABASE totsuka_dev default character set utf8;
```

再度確認すると変更されていることが分かると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619839/a02d434c-eda8-bf99-b247-d81d5755fffd.png)


しかし、これ以降できるテーブルに対してこのキャラクターセットが適応されるので、
既存のテーブルのキャラクターセットは「latin1」のままです。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619839/a52c9bdc-504e-e373-1a85-5e4c3ec664f3.png)
なので、テーブルを再作成しましょう！

DBソフトには基本既存のテーブルを作成するためのSQL文をエクスポートできる機能があるので、それを利用しましょう！
（※コピーだとキャラクターセットの内容もコピーしてしまうので、一から作成する必要があります。）
今回はphpMyAdminを使用します。
対象のテーブルを選択し、「エクスポート」タブをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619839/4ff3d2ec-3792-25e1-64f0-e4b69cbe5bd5.png)

出力をテキストで表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619839/6c90155b-18ec-95ab-867d-fa3c07806880.png)

今回は「構造」だけあればOKだったので、「構造」を選択します。
既存データも欲しければ「構造とデータ」を選択してください。
ちなみに、「構造はCreate文」、「データはInsert文」でエクスポートしてくれます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619839/13550863-15c3-015b-24e6-63fb8c0f2e40.png)

あとは実行ボタンをクリックするだけ！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619839/e91ad201-fe50-fc10-aa2d-901d2f28208b.png)

画面に以下のようにテキストで表示されます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619839/76910310-b15e-29f4-8975-1a78824cb6d2.png)

そしてこれを修正します。

```
-- テーブルの構造 `videos_search`--

CREATE TABLE IF NOT EXISTS `videos_search` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `videoId` varchar(20) DEFAULT NULL,
  `channelId` varchar(30) DEFAULT NULL,
  `title` varchar(250) DEFAULT NULL,
  `description` varchar(250) DEFAULT NULL,
  `publishedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
```

①既存のテーブル名と名前が同じなので、仮の名前を付けてあげましょう。
②また、最後の行の以下の箇所は削除しましょう。既にデフォルトで「CHARSET」に「utf8」を設定するようになっているはずなので大丈夫です。
「DEFAULT CHARSET=latin1 AUTO_INCREMENT=6」

```
-- テーブルの構造 `videos_search`--

CREATE TABLE IF NOT EXISTS `videos_search2` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `videoId` varchar(20) DEFAULT NULL,
  `channelId` varchar(30) DEFAULT NULL,
  `title` varchar(250) DEFAULT NULL,
  `description` varchar(250) DEFAULT NULL,
  `publishedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;
```

このCreate文を実行してみましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619839/46093b01-b38b-3d3b-8d5d-194af87c496b.png)

作成したテーブルを確認してみましょう。確認方法はいろいろありますが、
今回はエクスポートの画面から確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619839/e8639b22-aa8f-8b6e-aa11-bfce6288adc0.png)


「CHARSET=utf8」になっていますね！
あとは既存のテーブルを削除し、新たに作成したテーブル名を既存のテーブル名に変更すればOKです！

以上、お疲れ様でした！