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

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

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

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

MariaDB [testdb]> select* from test;
+----+------+-------+
| id | name | skill |
+----+------+-------+
|  1 | ・ﾝ・ｫ | HTML  |
+----+------+-------+
```
これを解決するのに、丸３日くらいかかりました。
途中嫌になって放り出していましたが(笑)、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に変更したらちゃんと表示されました。

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

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

```SQL
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\ |
+--------------------------+--------------------------------+
``` 

```SQL
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](https://qiita.com/YusukeHigaki/items/2cab311d2a559a543e3a)

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

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

```SQL
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。

```SQL
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](https://teratail.com/questions/58424)を参考にset namesしてみた**

```SQL
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」に設定した**

```SQL
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](https://teratail.com/questions/153238)

```SQL
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](https://qiita.com/user0/items/a9116acc7bd7b70ecfb0)

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

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

Active code page: 65001
```
で、確認してみると…

```SQL
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