0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-05-26

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

image.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

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

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

show create table テーブル名;

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

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

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

ALTER DATABASE totsuka_dev default character set utf8;

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

しかし、これ以降できるテーブルに対してこのキャラクターセットが適応されるので、
既存のテーブルのキャラクターセットは「latin1」のままです。。
image.png
なので、テーブルを再作成しましょう!

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

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

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

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

画面に以下のようにテキストで表示されます!
image.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

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

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

以上、お疲れ様でした!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?