質問編集履歴

2

皆様の情報を元に調べたことを追記しました。

2015/09/27 19:46

投稿

Ushiki
Ushiki

スコア7

test CHANGED
File without changes
test CHANGED
@@ -225,3 +225,95 @@
225
225
 
226
226
 
227
227
  このCreate View列の`where (`shohinsum`.`shohin_bunrui` = '闔 蜿・貍?€包スィ陷ゥ')`が文字化けしているからテーブル内の「事務用品」と一致せず`Empty set`と言われてしまうのでしょうかね。
228
+
229
+
230
+
231
+ ###追記 - まとめ
232
+
233
+ eripongさんの回答と、その中で教えてくださったリンク「[10.1.12. メタデータ用の UTF-8 ](http://dev.mysql.com/doc/refman/5.6/ja/charset-metadata.html)」を参考にして、スクリプトファイルもしくはコピペ元の文字コードをUTF-8にすることで解決しました。その際に調べたこと、分かったことを軽くまとめておこうと思います。
234
+
235
+
236
+
237
+ ####原因
238
+
239
+ 今回発生した問題は`mysql> SHOW VARIABLES LIKE 'character\_set\_%';`で確認できるメタデータと呼ばれる文字セットの不一致が原因だと思われます。MySQLクライアントを開始時には次のように変数がセットされていました。
240
+
241
+ ```
242
+
243
+ mysql> show variables like 'character\_set\_%';
244
+
245
+ +--------------------------+--------+
246
+
247
+ | Variable_name | Value |
248
+
249
+ +--------------------------+--------+
250
+
251
+ | character_set_client | utf8 |
252
+
253
+ | character_set_connection | utf8 |
254
+
255
+ | character_set_database | utf8 |
256
+
257
+ | character_set_filesystem | binary |
258
+
259
+ | character_set_results | utf8 |
260
+
261
+ | character_set_server | utf8 |
262
+
263
+ | character_set_system | utf8 |
264
+
265
+ +--------------------------+--------+
266
+
267
+ ```
268
+
269
+ この時点では文字セットはutf8で統一されているのですが、`set names cp932;`もしくは`CHARSET cp932;`で文字コードを変えると、
270
+
271
+ ```
272
+
273
+ mysql> show variables like 'character\_set\_%';
274
+
275
+ +--------------------------+--------+
276
+
277
+ | Variable_name | Value |
278
+
279
+ +--------------------------+--------+
280
+
281
+ | character_set_client | cp932 |
282
+
283
+ | character_set_connection | cp932 |
284
+
285
+ | character_set_database | utf8 |
286
+
287
+ | character_set_filesystem | binary |
288
+
289
+ | character_set_results | cp932 |
290
+
291
+ | character_set_server | utf8 |
292
+
293
+ | character_set_system | utf8 |
294
+
295
+ +--------------------------+--------+
296
+
297
+ ```
298
+
299
+ となって一部はcp932に変更されますが、全てではないようです。この後のどの操作がどの変数を使っているのかまでは理解していないのですが、`character_set_database`が一致していないのはよくなさそうですね。
300
+
301
+
302
+
303
+ ####対策
304
+
305
+ 一つはcp932を使わずにutf8を使うこと。コマンドプロンプトから直接入力したりコピペするとやはりShift-JISだからうまく表示はさません。しかしutf8で書いたスクリプトファイルにまとめて実行するとちゃんと表示されるようです。しかしコマンドプロンプト上で簡単に確認したい場合はとても面倒になりますね。
306
+
307
+
308
+
309
+ もう一つは上の変数をcp932に統一すること。私はWindows7でXAMPPを利用してインストールしたMySQLを利用しています。`C:\xampp\mysql\bin\my.ini`が設定ファイルのようですが、それを変えることでcp932に統一できればと思います。まだここについてはよく調べていないので、本当にうまくいくかはわかりません。
310
+
311
+
312
+
313
+ いずれにせよ今は練習段階で簡単に触れる用にWindows上でやっていますが、将来的にはLinux上で扱うことになると思うので、その場合はmy.confを設定してutf8で統一してできるようになりたいと思います。
314
+
315
+
316
+
317
+ ####最後に
318
+
319
+ 初めての質問投稿でこんなにも多くの回答をいただけるとは思いませんでした。皆様大変有難うございました。

1

eripongさんの情報追加依頼に対して応対し、「追記」セクションを設けました。

2015/09/27 19:46

投稿

Ushiki
Ushiki

スコア7

test CHANGED
File without changes
test CHANGED
@@ -191,3 +191,37 @@
191
191
  SQLを勉強し始めたばかりなので、勝手がわからず困っています。
192
192
 
193
193
  何かご存知であればよろしくお願いします。
194
+
195
+
196
+
197
+
198
+
199
+ ###追記
200
+
201
+ eripongさんから”show create viewの結果はどうなりますか?"という情報の追加依頼がありました。結果はすごい横長の1行のテーブルだったので、少し直して書きます。
202
+
203
+
204
+
205
+ ```TXT
206
+
207
+ View:
208
+
209
+ shohinsumjim
210
+
211
+ Create View:
212
+
213
+ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `shohinsumjim` AS select `shohinsum`.`shohin_bunrui` AS `shohin_bunrui`,`shohinsum`.`cnt_shohin` AS `cnt_shohin` from `shohinsum` where (`shohinsum`.`shohin_bunrui` = '闔 蜿・貍?€包スィ陷ゥ')
214
+
215
+ character_set_client:
216
+
217
+ cp932
218
+
219
+ collation_connection:
220
+
221
+ cp932_japanese_ci
222
+
223
+ ```
224
+
225
+
226
+
227
+ このCreate View列の`where (`shohinsum`.`shohin_bunrui` = '闔 蜿・貍?€包スィ陷ゥ')`が文字化けしているからテーブル内の「事務用品」と一致せず`Empty set`と言われてしまうのでしょうかね。