12
8

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 5 years have passed since last update.

コマンドプロンプト自体の文字コードの変更-MySQLで文字化けした時の対処-

Last updated at Posted at 2019-04-11

コマンドプロンプトで日本語が文字化けしてしまう!

コマンドプロンプト上でMySQLの各カラムを表示すると、日本語のみ文字化けしてしまっていた。

MariaDB [testdb]> insert into test(name,skill)values('みき','HTML');

MariaDB [testdb]> select* from test;
+----+------+-------+
| id | name | skill |
+----+------+-------+
|  1 | ・ン・ォ | HTML  |
+----+------+-------+

これを解決するのに、丸3日くらいかかりました。
途中嫌になって放り出していましたが(笑)、teratailで神様のような方々からご回答頂き、解決することができました。
原因はいつも通り単純だったわけですが…

###前提・環境
・プログラミング学習を始めて4か月くらいの新人プログラマー
・今までMySQLは自分のMacで触っていたが今回は会社のWindowsを使っており、コマンドでの文字化けは初体験。
・Windows10
・XAMPP 7.2.6
・MySQL Ver 15.1 Distrib 10.1.33-MariaDB, for Win32
※SQL文はコマンドプロンプトで打ち込んでいます

###結論
コマンドプロンプト自体の文字コードと、DB・テーブルの文字コードが一致していなかったことが原因。
chcpでコマンドプロンプト自体の文字コードを確認し、chcp 65001で文字コードをUTF8に変更したらちゃんと表示されました。

試したこと

せっかく3日もかけたので、試したこと全部載せておきます。
初心者さんの参考になれば。

①まずはDBの文字コード設定を確認。

MariaDB [testdb]> show variables like "chara%";
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | cp932                          |
| character_set_connection | cp932                          |
| character_set_database   | utf8                           |
| character_set_filesystem | binary                         |
| character_set_results    | cp932                          |
| character_set_server     | utf8                           |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+
MariaDB [testdb]> show create database testdb;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| testdb   | CREATE DATABASE `testdb` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+

デフォルトがutf8なのが分かります。

②my.iniの[client]と[mysqld]の文字コードをutf8に書き換え
参考URL:https://qiita.com/YusukeHigaki/items/2cab311d2a559a543e3a

この記事を参考にmy.iniの2箇所を書き換えましたが、DBの設定を確認すると文字コードの設定が最初と変わっていなかったので

③my.iniの[mysql]のdefault-set-characterもutf8に書き換え
で、DBの設定を確認

MariaDB [(none)]> show variables like "chara%";
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8                           |
| character_set_connection | utf8                           |
| character_set_database   | utf8                           |
| character_set_filesystem | binary                         |
| character_set_results    | utf8                           |
| character_set_server     | utf8                           |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+

ちゃんとutf8に変わりました。
この状態で新たにDB作成し、INSERT。

MariaDB [(none)]> create database test2;

MariaDB [test2]> create table table1(id int auto_increment,name varchar(20),skill varchar(20),index(id));

MariaDB [test2]> insert into table1(name,skill)values('みき','PHP');

MariaDB [test2]> select* from table1;
+----+------+-------+
| id | name | skill |
+----+------+-------+
|  1 | ?ン・?  | PHP   |
+----+------+-------+

これでもダメだったので、

https://teratail.com/questions/58424を参考にset namesしてみた

MariaDB [(none)]> set names cp932;

MariaDB [(none)]> create database newone;
MariaDB [newone]> create table tbl3(id int,name varchar(10),skill varchar(10));
MariaDB [newone]> insert into tbl3(id,name,skill)values(1,'みき','HTML');

MariaDB [newone]> select* from tbl3;
+------+------+-------+
| id   | name | skill |
+------+------+-------+
|    1 | ・ン・ォ | HTML  |
+------+------+-------+

これでもダメだったので、もうお手上げ状態。
teratailに質問を投げて、返ってきた回答をくまなく試しました。

⑤文字コードを「utfmb4」に設定した

MariaDB [(none)]> 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     | utf8                           |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+

MariaDB [test1]> create table test2(id int,name varchar(20))default charset=utf8mb4;
MariaDB [test1]> insert into test2(id,name)values(1,'みき');
MariaDB [test1]> select* from test2;
+------+------+
| id   | name |
+------+------+
|    1 | ?ン・?  |
+------+------+

⑥文字コードをsjisに設定した
参照:https://teratail.com/questions/153238

MariaDB [test3]> SET character_set_results = sjis;
MariaDB [test3]> SET character_set_client = sjis;
MariaDB [test3]> create table test2(id int,name varchar(20))default charset=sjis;
MariaDB [test3]> insert into test2(id,name)values(1,'みき');
MariaDB [test3]> select* from test2;
+------+------+
| id   | name |
+------+------+
|    1 | ???  |
+------+------+

###これでついに解決!
teratailで神様のような回答を頂き、解決。

sjis自体が文字化けしている事に対して

そこから設定すべきです。Mysqlの問題以前かも知れません。
https://qiita.com/user0/items/a9116acc7bd7b70ecfb0

とコメントいただき、コマンドプロンプト自体の文字コードをUTF8に変更(テーブルの文字コードがUTF8であるため)。

# chcp
現在のコード ページ: 932
# chcp 65001

Active code page: 65001

で、確認してみると…

MariaDB [trainingdb]> select* from userprofile;
+--------+-------------+-----------+-----------------+--------------+
| userid | name        | bloodtype | origin          | skill        |
+--------+-------------+-----------+-----------------+--------------+
|      6 | みき         | O       | 九州・沖縄      | HTML,CSS     |
|      7 | miki         | O       | 九州・沖縄      | HTML,CSS,PHP |
|      8 | みき         | A       | 神奈川県        | HTML,CSS     |
+--------+--------------+-----------+-----------------+---------------+

苦節3日、やっとのことで解決しました!!
teratailで優しいご回答をくださった皆さんには感謝しかないです。

こういう初歩的な問題でハマるの早くやめたい・・・!
初学者の皆さん、一緒に頑張っていきましょう。。。

###teratailでの質問
https://teratail.com/questions/183601

12
8
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
12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?