【備忘録】MySQLで文字化け(RDS)


テーブルの日本語が文字化けしてしまう

原因は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」に変更する必要があります。

テーブルに設定されているキャラクターセットの確認

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

show create table テーブル名;

「latin1」が使用されているみたいですね。

キャラクターセットの設定変更

以下のコマンドを実行してください。

ALTER DATABASE totsuka_dev default character set utf8;

再度確認すると変更されていることが分かると思います。

しかし、これ以降できるテーブルに対してこのキャラクターセットが適応されるので、
既存のテーブルのキャラクターセットは「latin1」のままです。。

なので、テーブルを再作成しましょう!

DBソフトには基本既存のテーブルを作成するためのSQL文をエクスポートできる機能があるので、それを利用しましょう!
(※コピーだとキャラクターセットの内容もコピーしてしまうので、一から作成する必要があります。)
今回はphpMyAdminを使用します。
対象のテーブルを選択し、「エクスポート」タブをクリックしてください。

出力をテキストで表示します。

今回は「構造」だけあればOKだったので、「構造」を選択します。
既存データも欲しければ「構造とデータ」を選択してください。
ちなみに、「構造はCreate文」、「データはInsert文」でエクスポートしてくれます!

あとは実行ボタンをクリックするだけ!

画面に以下のようにテキストで表示されます!

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

-- テーブルの構造 `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文を実行してみましょう!

作成したテーブルを確認してみましょう。確認方法はいろいろありますが、
今回はエクスポートの画面から確認してみます。

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

以上、お疲れ様でした!