- ベストアンサー
MySQLで日本語の文字化け
- MySQLで日本語の文字化けについて質問します。
- LibreOfficeで作成した日本語のデータをMySQLのテーブルに移植しましたが、表示される文字が化けています。
- どこが間違っているのかわかりません。詳しい方、教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
回答No.4です。 前回は質問者さまと同じ手順で行いましたが、私は普段あまりコマンド入力をしません。 提案というわけではありませんが、改めて私流の方法でデータベース作成から試してみました。 CSVファイルは問題ないと思いますのでそのまま使います。 ちなみに環境は仮想マシンですが、Windows 10 Pro English(US)、XAMPP 8.1.6、LibreOffice7.7.4です。 1.phpMyAdminでデータベースkaraokeをcp932_japanese_ciで作成します。 ここで文字セットを設定しておくと、新たに作成するテーブルやカラムに反映されるので、あとから変更する手間が省けます。 2.phpMyAdminでテーブルoriginalpathを作成します。 カラムidをINT型のオートインクリメントで。 カラムsongpathをTEXT型で。 3.コマンドプロンプトを開きます。 chcp 932 C:\xampp\mysql\bin\mysql.exe -u root karaoke load data infile "C:/xampp-backup/htdocs/karaoke/KARAOKE-all-path.csv" into table originalpath fields terminated by ',' lines terminated by '\r\n'; select * from originalpath; 結果の画像を添付しておきます。 MySQLに接続してからの文字セットの変更はしていません。 私は設定を変更しなくてもうまくいく間は変更しない方針なのでmy.iniは初期のままです。 以前、同じように英語版のWindowsでXAMPPをお使いで文字化けの質問があり、質問者さまでは現象が出るのですが、私の環境では現象がでないことがありました。 その時はXAMPPを再インストールして解決されたそうです。
その他の回答 (4)
- dell_OK
- ベストアンサー率13% (766/5720)
回答No.3です。 変化ありませんでしたか。 CSVを取り込み直されたでしょうか。 私は同じ環境で同じ手順で文字化けを確認してから、カラムのcollateをcp932にしてCSVを取り込み直すと文字化けしなかったので、これかなと思ったのです。
お礼
お礼が遅れてしまい、申し訳ありません。 カラムのCOLLATEをセットしてからCSVファイルをロードし直してみましたが、文字化けは治りませんでした。 当然のことですが、MySQLのmy.ini の夫々の関係部分も character-set=cp932 としてよいのですよね? my.ini の設定を変更した時はいつもコンピューターを再起動しています。 もう出来る事は全てやってしまったようなのですが、まだ何かしてみるべきことがあるでしょうか? 何かご提案頂ければ、何でもやってみたいと思います。
- dell_OK
- ベストアンサー率13% (766/5720)
テーブルのカラムのcollateがcp932になっていないのではないでしょうか。
お礼
ご回答有難うございます。 alter table num2song modify fullpath text character set cp932 collate cp932_japanese_ci; を実行しましたが、変化ありませんでした。 引き続き関連する記事などをあたってみようと思います。
- Ultra-Hetare
- ベストアンサー率38% (204/526)
正直文字コードに詳しくはありません。 が、 コードページ932って古いと思います。 eucjp-msとかなどで過去にお世話になりましたが、 いまのUTF全盛時代に、それはないんじゃないかと思いますね。
お礼
ご回答いただき、有難うございます。 CP932は古いといわれますが、MariaDBのプロンプトから show character set をやると ちゃんと P932 というコードがあって、description も SJIS for Windows Japanese, collation も CP932_japanese_ci と表示されます。これはそのコードが使えるということではないのでしょうか? 今はもうUTFの時代だからと言って、「CP932はもはやdepricate されて使えません」というのであればわかりますが、そうでないのなら、なぜ自分のやり方で文字が化けてしまうのかということを教えていただきたいわけです。 よろしくお願いします。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
「プロンプト画面」とやらは、その文字コードに対応してるんですか? なので、例えば、PHPMYADMINなど、WEB系のMYSQLビュアーで 見てみるとどうなりますか? アルファベットのみが、文字化けしていない所から 間違いなく、他バイトコードだけの問題のようなので、 そうなると、データを流した時か、表示に使ったソフトが 原因としては、可能性が高いので、今回は「表示側ソフト」を 疑ってみるのが良いかと思います。
お礼
早速にご回答を頂き、有難うございます。 「表示側ソフト」といいましても、表示しているのは特に何かのアプリケーションソフトといったようなものではなくて、単にWindowsに付属のコマンドプロンプトです。 テーブルの内容をselect 文で表示する前に、いったんMariaDBを抜けてMySQL>bin まで戻り、CHCP 932を実行していますので、最初に作って移植したデータの文字コードにあっていると思います。 またMySQLを使う時はいつもコマンドプロンプトからやっていますので。PHPMYADMINはつかったことがありませんが、コマンドプロンプトでは文字化けしたものがPHPMYADMINではちゃんと表示されることがあるのでしょうか?
補足
PHPMyAdmin を使って同じselect文を実行してみましたが、結果は同じ文字化けでした。
お礼
かゆい所に手の届くような詳しい回答を頂き、有難うございます。 回答様のやった通りにphpMyAdminを使ってデータベースからすべて作り直しましたら、奇跡の様ですが日本語がちゃんと表示されるようになりました。 コマンドウィンドーでちゃんと表示されるという事は、データベースのテーブルにもそのような姿で保存されているという事ですよね。 私が最初に行った手続きで何故文字が化けるのかはいまだに不明ですが、これでこのデータベースをもとにしてPHPでカラオケの選曲システムを作っていくことが出来ます。 今後は日本語を使う場合にはphpMyAdminを活用していきたいと思います。 問題解決までずっとお付き合いいただき、本当に有難うございました。