回答編集履歴

1

暫定解決策を記述

2018/07/14 13:16

投稿

tanat
tanat

スコア18728

test CHANGED
@@ -1,4 +1,8 @@
1
- 自分で試したことは無いんですが、windowsのコマンドプロンプト、powershellって標準文字コードがShiftJIS(厳密にはcp932?)だと思われるので、UTF-8なDBに入力したら文字化けしそうな気がします。
1
+ ~~自分で試したことは無いんですが、windowsのコマンドプロンプト、powershellって標準文字コードがShiftJIS(厳密にはcp932?)だと思われるので、UTF-8なDBに入力したら文字化けしそうな気がします。~~
2
+
3
+
4
+
5
+ ↑だめでした。
2
6
 
3
7
 
4
8
 
@@ -11,3 +15,145 @@
11
15
 
12
16
 
13
17
  XAMPP for linux とかだったら見当違いな回答なので、OSも追記してみて下さい。
18
+
19
+
20
+
21
+ **追記**
22
+
23
+ 以下の方法で解決できますが、アプリケーション側で問題が起きそうな気がするので、おとなしくutf8をまともに扱えるクライアント(MySQL WorkbenchとかWindows Subsystem for Linuxのbashとか)からコマンドを発行するのをお勧めします。
24
+
25
+
26
+
27
+ 原因は恐らく、
28
+
29
+ 1. コマンドプロンプト+windows用MySQLクライアントの環境ではutf8が正しく扱えないこと
30
+
31
+ 2. xamppのコントロールパネルから呼び出させるコマンドプロンプトは若干挙動が違う様で、コマンドプロンプトで通用する方法が通じないこと
32
+
33
+
34
+
35
+ の二つです。
36
+
37
+ 以下の解決方法では
38
+
39
+ 1. コマンドプロンプトでは無理にutf8を扱おうとしない
40
+
41
+ 2. xamppのshellは使わない
42
+
43
+
44
+
45
+ という方向性で行っています。
46
+
47
+
48
+
49
+ **解決方法**
50
+
51
+
52
+
53
+ 1. my.iniを修正してクライアント周りの文字コードをcp932に戻します。
54
+
55
+ 現在[client]のあたりに`default-character-set=utf8`となっている部分があるはずなので`default-character-set=cp932`に変更
56
+
57
+
58
+
59
+ 2. MySQLを再起動します。
60
+
61
+ 3. Win+r → cmd でコマンドプロンプトを起動
62
+
63
+ 4. `c:\xampp\mysql\bin\mysql.exe -u root` でMySQLのにログイン
64
+
65
+ 5. 文字コードを確認
66
+
67
+ ```
68
+
69
+ MariaDB [(none)]> show variables like '%char%';
70
+
71
+ +--------------------------+--------------------------------+
72
+
73
+ | Variable_name | Value |
74
+
75
+ +--------------------------+--------------------------------+
76
+
77
+ | character_set_client | cp932 |
78
+
79
+ | character_set_connection | cp932 |
80
+
81
+ | character_set_database | utf8 |
82
+
83
+ | character_set_filesystem | binary |
84
+
85
+ | character_set_results | cp932 |
86
+
87
+ | character_set_server | utf8 |
88
+
89
+ | character_set_system | utf8 |
90
+
91
+ | character_sets_dir | C:\xampp\mysql\share\charsets\ |
92
+
93
+ +--------------------------+--------------------------------+
94
+
95
+ 8 rows in set (0.00 sec)
96
+
97
+
98
+
99
+ ```
100
+
101
+
102
+
103
+ 6 データの入力と確認
104
+
105
+ ```
106
+
107
+
108
+
109
+ MariaDB [(none)]> use sampledb;
110
+
111
+ Database changed
112
+
113
+ MariaDB [sampledb]> INSERT INTO member(last_name,first_name,age) VALUES('田中','一郎',21);
114
+
115
+ Query OK, 1 row affected (0.00 sec)
116
+
117
+
118
+
119
+ MariaDB [sampledb]> select * from member;
120
+
121
+ +----+-----------+------------+------+
122
+
123
+ | id | last_name | first_name | age |
124
+
125
+ +----+-----------+------------+------+
126
+
127
+ | 1 | ?c?? | ???Y | 21 |
128
+
129
+ | 2 | ?? | ?? | 21 |
130
+
131
+ | 3 | ?? | ?? | 21 |
132
+
133
+ | 4 | ?c?? | ???Y | 21 |
134
+
135
+ | 5 | 田中 | 一郎 | 21 |
136
+
137
+ | 6 | ?c?? | ???Y | 21 |
138
+
139
+ | 7 | 田中 | 一郎 | 21 |
140
+
141
+ | 8 | 田中 | 一郎 | 21 |
142
+
143
+ | 9 | 田中 | 一郎 | 21 |
144
+
145
+ | 10 | 田中 | 一郎 | 21 |
146
+
147
+ | 11 | 田中 | 一郎 | 21 |
148
+
149
+ +----+-----------+------------+------+
150
+
151
+ 11 rows in set (0.00 sec)
152
+
153
+
154
+
155
+ ```
156
+
157
+
158
+
159
+ *最後の行以外は他の方法(PHPスクリプトからやMySQL Workbenchから)正しく入力したデータなので、正しく動いているであろうと判断しました。