MySQLで日本語の文字化け

このQ&Aのポイント
  • MySQLで日本語の文字化けについて質問します。
  • LibreOfficeで作成した日本語のデータをMySQLのテーブルに移植しましたが、表示される文字が化けています。
  • どこが間違っているのかわかりません。詳しい方、教えてください。
回答を見る
  • ベストアンサー

MySQLで日本語の文字化け

お世話になります。 LibreOfficeで作成した日本語のデータ(カラオケの曲が記憶されているパスです)をMySQLのテーブルに移植しましたが、プロンプト画面で表示させると文字化けしています。どこが間違っているのかさんざん考えましたがわかりません。 私のしたことは次のようなことです。 ちなみに、使ったコンピューターは英語版のWindows10 64Bitです。MySQLとApatchはXamppー8.03からインストールしたものです。 (1)カラオケの曲のパスを取得するために、曲の入ったハードディスクのディレクトリーを開いて曲を選択し、シフトキーを押しながらマウスを右クリックして"copy as path"を選び、そのパスをLibreOfficeのスプレッドシートに貼り付けました。添付の写真の上のものがその結果です。 (2)このデータをCSV形式で、Japanese(Win932)という文字セットでセーブします。 (3)MariaDBのプロンプトからMySQL(MariaDB)に入り、以下の文字セットをCP932に統一します。 character_set_client character_set_connection character_set_results (4)同じくプロンプトからデータベースの文字セットを設定します。    alter table table-name character set cp932 collate cp932_general_ci (5)いったんMariaDBから出て、chcp 932 を実行しておきます。 (6)MariaDBに戻ってcsvデータをテーブルに移植します。 MariaDB [karaoke]> load data infile "C:/xampp-backup/htdocs/karaoke/KARAOKE-all-path.csv" into table originalpath fields terminated by ',' lines terminated by '\r\n'; (7)そして移植したデータを見たのが添付写真の下のものです。 一貫して文字コードはCP932で設定してきたのに、なぜちゃんと表示されないのでしょうか? 詳しい方、どうか詳しく教えて頂けると有難く思います。

  • MySQL
  • 回答数5
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (740/5644)
回答No.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を再インストールして解決されたそうです。

papashiroSooke
質問者

お礼

かゆい所に手の届くような詳しい回答を頂き、有難うございます。 回答様のやった通りにphpMyAdminを使ってデータベースからすべて作り直しましたら、奇跡の様ですが日本語がちゃんと表示されるようになりました。 コマンドウィンドーでちゃんと表示されるという事は、データベースのテーブルにもそのような姿で保存されているという事ですよね。 私が最初に行った手続きで何故文字が化けるのかはいまだに不明ですが、これでこのデータベースをもとにしてPHPでカラオケの選曲システムを作っていくことが出来ます。 今後は日本語を使う場合にはphpMyAdminを活用していきたいと思います。 問題解決までずっとお付き合いいただき、本当に有難うございました。

その他の回答 (4)

  • dell_OK
  • ベストアンサー率13% (740/5644)
回答No.4

回答No.3です。 変化ありませんでしたか。 CSVを取り込み直されたでしょうか。 私は同じ環境で同じ手順で文字化けを確認してから、カラムのcollateをcp932にしてCSVを取り込み直すと文字化けしなかったので、これかなと思ったのです。

papashiroSooke
質問者

お礼

お礼が遅れてしまい、申し訳ありません。 カラムのCOLLATEをセットしてからCSVファイルをロードし直してみましたが、文字化けは治りませんでした。 当然のことですが、MySQLのmy.ini の夫々の関係部分も character-set=cp932 としてよいのですよね? my.ini の設定を変更した時はいつもコンピューターを再起動しています。 もう出来る事は全てやってしまったようなのですが、まだ何かしてみるべきことがあるでしょうか? 何かご提案頂ければ、何でもやってみたいと思います。

  • dell_OK
  • ベストアンサー率13% (740/5644)
回答No.3

テーブルのカラムのcollateがcp932になっていないのではないでしょうか。

papashiroSooke
質問者

お礼

ご回答有難うございます。 alter table num2song modify fullpath text character set cp932 collate cp932_japanese_ci; を実行しましたが、変化ありませんでした。 引き続き関連する記事などをあたってみようと思います。

回答No.2

正直文字コードに詳しくはありません。 が、 コードページ932って古いと思います。 eucjp-msとかなどで過去にお世話になりましたが、 いまのUTF全盛時代に、それはないんじゃないかと思いますね。

papashiroSooke
質問者

お礼

ご回答いただき、有難うございます。 CP932は古いといわれますが、MariaDBのプロンプトから show character set をやると ちゃんと P932 というコードがあって、description も SJIS for Windows Japanese, collation も CP932_japanese_ci と表示されます。これはそのコードが使えるということではないのでしょうか? 今はもうUTFの時代だからと言って、「CP932はもはやdepricate されて使えません」というのであればわかりますが、そうでないのなら、なぜ自分のやり方で文字が化けてしまうのかということを教えていただきたいわけです。 よろしくお願いします。

回答No.1

「プロンプト画面」とやらは、その文字コードに対応してるんですか? なので、例えば、PHPMYADMINなど、WEB系のMYSQLビュアーで 見てみるとどうなりますか? アルファベットのみが、文字化けしていない所から 間違いなく、他バイトコードだけの問題のようなので、 そうなると、データを流した時か、表示に使ったソフトが 原因としては、可能性が高いので、今回は「表示側ソフト」を 疑ってみるのが良いかと思います。

papashiroSooke
質問者

お礼

早速にご回答を頂き、有難うございます。 「表示側ソフト」といいましても、表示しているのは特に何かのアプリケーションソフトといったようなものではなくて、単にWindowsに付属のコマンドプロンプトです。 テーブルの内容をselect 文で表示する前に、いったんMariaDBを抜けてMySQL>bin まで戻り、CHCP 932を実行していますので、最初に作って移植したデータの文字コードにあっていると思います。 またMySQLを使う時はいつもコマンドプロンプトからやっていますので。PHPMYADMINはつかったことがありませんが、コマンドプロンプトでは文字化けしたものがPHPMYADMINではちゃんと表示されることがあるのでしょうか?

papashiroSooke
質問者

補足

PHPMyAdmin を使って同じselect文を実行してみましたが、結果は同じ文字化けでした。

関連するQ&A

  • MariaDBデータベースの日本語文字化け

    しばらく前に「PHPspreadsheetのインストール」の質問でお世話になった者です。 この件ではXamppを再インストールしてPHPspreadsheetが使えるようになったのですが、今度はMariaDBデータベースで作ってある日本語データの表示で文字化けが起こってしまいました。 このデータベースは前々回に質問させていただいた「PHPでのJSONの使い方(1)..(3)」で使用していた英単語と日本語の表示プログラム用のものです。 このプログラムを実行したスクリーンショットを添付してあります。 データベースの作成時には各フィールドの文字セットはcp932としてあります。 コマンドプロンプトで CHCP 932 としてデータテーブルの中をのぞくとちゃんと日本語が表示されます。 show variables like "char%"; を実行すると以下のようになってます。 +--------------------------+--------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------+ | character_set_client | cp932 | | character_set_connection | cp932 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | cp932 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | C:\xampp\mysql\share\charsets\ | +--------------------------+--------------------------------+ データベースの文字セットがutf8mb4 なのでこれをcp932にすればいいのかなと思い、次のコマンドを入れてみましたが変わりありませんでした。 ALTER TABLE words MODIFY japanese varchar(50) CHARACTER SET cp932 NOT NULL; 以前のXampp(xampp-windows-x64-8.0.3-0-VS16-installer.exe)の下ではちゃんと動いていたので、入れ直したXampp(xampp-windows-x64-7.3.11-0-VC15-installer.exe)のインストール後にするべきことを全部していないのだと思いますが、文字セットの設定はなんだかややこしくてよくわかりません。 どなたかお知恵を貸していただけないでしょうか。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • MySQLの文字化け

    MySQLにPHPでデータを入力しています。 utf8でデータを送信しています。 どうも MySQLの設定がうまくできてないようです。 どこを どうやって変えたらよいのでしょうか? mysql> show variables like 'char%'; +----------------------+-----------------------+ | Variable_name        | Value             | +----------------------+-----------------------+ | character_set_client    | cp932             | | character_set_connection  | cp932             | | character_set_database   | latin1             | | character_set_filesystem  | binary             | | character_set_results  | cp932             | | character_set_server   | latin1             | | character_set_system   | utf8              | | character_sets_dir     | C:\xampp\mysql\share\charsets\ | +----------------------+-----------------------+

    • ベストアンサー
    • PHP
  • 文字化けが解消できません…MySQL5.2.1

    OS:WINDOWS XP MySQL5.2.1 Apache2.2.4 php-5.2.1 文字(EUC-JP使用) PHPからテーブルにINSERTした場合、echoできちんと表示できます。 しかし、コマンドプロンプトを開いてテーブルを見ると、 PHPからINSERTした日本語が文字化けしています。 コマンドプロンプトにINSERTで日本語を入力すると、 Query OK と表示されますが、SELECT * FROM で内容を表示すると、 空白で何も表示されません(PHPのechoでも表示されません) 色々調べてみたのですが…どうしても解決できません… 【my.ini】 [client] port=3306 default-character-set=ujis [mysql] default-character-set=ujis [mysqld] port=3306 basedir="c:/mysql5/" datadir="c:/mysql5/data/" default-character-set=ujis init-connect="SET NAMES ujis" skip-character-set-client-handshake [mysqldump] default-character-set = ujis 【SHOW VARIABLES で確認した文字コード】 character_set_client ujis character_set_connectioon ujis character_set_database ujis character_set_filesystem binary character_set_results ujis character_set_server ujis character_set_system utf8 試しに mysql> SET NAMES ujis と入力したりしてみましたが 文字化けしたままになっております。 SHOW CREATE DATABASE と SHOW CREATE TABLE で表示された CHARACTER SETは ujis でした。 my.iniの character-set を ujis に設定した場合、 日本を表示させることはできないのでしょうか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • テーブル名の文字化けについて

    MySQL5.0.37をWINDOWS XP上で使用しています。 コマンドプロンプト上で 「mysql>show variables like 'character%';」と入力すると +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | character_set_client | cp932 | | character_set_connection | cp932 | | character_set_database | cp932 | | character_set_filesystem | binary | | character_set_results | cp932 | | character_set_server | cp932 | | character_set_system | utf8 | +--------------------------+-------+ というような状態になっております。 ここでテーブルを作成したく、 「mysql> cretate table T_商品 (・・,・・);」 と入力し確認すると、テーブル名が「t_?E」などとなってしまったり、 「mysql> create table T_請求詳細_非課税 (・・,・・);」 と入力し 「mysql> show tables;」 と入力するとテーブルが表示されなかったりしてしまいます。 設定ファイルの「my.ini」もちゃんと設定されていると思いますし、配置場所も間違っていないと思うのですが、キャラクターセットが間違えていたりするのでしょうか? まだMySQLを触り始めたばかりで、初歩的なミスを犯していないとは限らないような不安な状態ですが、本当に困っていてご教授いただけるととても助かります。 よろしくお願いいたします。

  • mysqlの文字化けについて

    mysqlの文字化けについて教えて下さい。 現在はテーブルを作って、データを挿入している段階なのですが、日本語入力のみ文字化けが起こります。 調べたところ、下記のように「my.ini」に記述すると言うことでしたので、試してみました。 [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 [mysqldump] default-character-set =utf8 skip-character-set-client-handshake ※そのほかSERVER SECTIONの箇所へも「default-character-set=utf8」を記述。 csvファイルを読み込みすると、日本語の箇所のみ文字化けが起こり、mysql上で直接データを挿入すると、ローマ字は入るのですが、漢字だとエラーになってしまいます。 エラー文 incorrect string value: '入力文字が文字化けして表示’for column 'カラム名’at row 1 何か原因のお解かりになる方、宜しくお願いします。

    • ベストアンサー
    • MySQL
  • MYSQLの文字化けについて

    MYSQLの文字化けについて質問させてください。 MYSQL COMMAND LINE CLIENTでMYSQLに作ったデータベースに下記のSQL文でデータを入れると、下記のエラーが出ます。 sql 「insert into テーブル名 (id、type)values (1,'男性’);」 エラー文 incorrect string value: '入力文字が文字化けして表示’for column 'type’at row 1 文字化け対策として、調べたところ、下記のように「my.ini」に記述すると言うことでしたので、試してみました。 [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 skip-character-set-client-handshake [mysqldump] default-character-set =utf8 ちなみにその他情報です。 MySQLのバージョン MySQL 5.1 MySQLで有効になっている文字コード 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 何かお解かりになることがありましたら、宜しくお願いします。

  • MySQ漢字文字化け

    こちらのHPでも調べましたが、総て行ったつもりですが、コマンドプロンプトでSQLを発行していますが、文字化けが起こります。 OS WindowsXP MySQL 5.1.30 現状での文字コードは character_set_client sjis character_set_connection sjis character_set_database sjis character_set_filesystem binary character_set_results sjis character_set_server latin1 character_set_system utf8 character_sets_dir C:...... です。 テーブルは、 mysql> create table test (no int,data1 text character set sjis,data2 text character set sjis); として作成しています。 my.iniも色々設定変更しましたが、駄目です。どなたか、御教授の程宜しくお願い申し上げます。

  • MAMPのMySQLで文字化けする

    すみません、教えてください(><) mac( os X 10.7.5)でMAMP+Eclipse+PHPを使って以下のようにMySQLにデータ挿入 mysql_connect('localhost','root','root') or die(mysql_error()); mysql_select_db('mymy'); mysql_query('SET NAMES UTF-8'); mysql_query('INSERT INTO item SET id=1, name="あいうえお"'); をしたのですが、 phpMyadminからデータを確認してみると日本語が文字化けしてしまいます。 (phpMyadminからデータを挿入した場合はちゃんと表示されます。) 色々と調べ、 Eclipseの環境設定でワークスペースの文字コードやphpの文字コードをUTF-8にしたり、 MySQLのmy.cnfファイルの中に以下 [client] default-character-set = utf8 [mysqld] skip-character-set-client-handshake default-character-set = utf8 character-set-server = utf8 collation-server = utf8_unicode_ci init-connect = SET NAMES utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 を追加して再起動し、DBを一旦削除して再度作り直して挿入してみたりとやったのですが、改善されません。 サーバ接続の照合順序 は「utf8_general_ci」として作成しています。 コンソールからMySQLへ接続してDBの文字コードを確認してみると character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /Applications/MAMP/Library/share/charsets/ | というかたちになっています。 他にどういった点を改善すればいいのでしょうか? もうお手上げ状態でどうすることも出来ずにいます。。。

  • MySQL文字化け「表」について

    1.DBの設定。 [mysqld] default-character-set = utf8 skip-character-set-client-handshake [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 2.コマンドプロンプトより接続(musqldがUTF設定のため、SJIS変換) SET NAMES SJIS; 3.表の作成 create table table1( id int, name varchar); 4.表に追加 INSERT INTO table1(item,name) VALUES("1","表"); INSERT INTO table1(item,name) VALUES('1','表'); ⇒どちらのSQL分でもDBには、表 という文字がNullで格納されます。  (1 は格納されています。) 質問1 "表"はSJISで文字化け?するというのをどこかで見た覚えがあるのですが '表'でもInsはできないものなのでしょうか。 "であろうと'であろうと、表は SJIS環境ではエラーになるのでしょうか。 質問2 このままでは、コマンドプロンプトから文字化けする?ため 「表」という文字を含むInsert検証ができません・・・。 コマンドプロンプト以外で、ターミナルに使えるツールがあれば ご教授お願いします。(phpMyAdminも除外でお願いします。)

    • ベストアンサー
    • MySQL
  • PHP でMariaDBを使ってスペイン語を表示す

    いつもお世話になります。 現在PHPとMySQLを使って、スペイン語と英語の対応データベースを作っていますが、スペイン語特有のアクセント記号のついた母音やNの上にティルダのついた文字などが化けてしまってちゃんと表示されません。 自分のやり方は次のようなものです。 1:LibreOfficeを使ってスペイン語と、それに対応する英語の文章を作成します。 Windows10のスペイン語言語パックをダウンロードしてあります。 2:100対ほど溜まるとCSVファイルとしてセーブします。この時のキャラクターセットは UNICODE(UTF-8) です。 3:コマンドプロンプトからMariaDBのプロンプトまで行き   load data infile "file-path" into table tablr-name fields terminated by ',' lines terminated by '\r\n'; としてデータをデータベースに移植します。 4:その後このテーブルのあるデータベースに行き、次のようにsystemfile 以外のキャラクターセットをUTF-8にせっていします。 set character_set_client = utf-8; set character_set_connection = utf-8; set character_set_database = utf-8; set character_set_server = utf-8; set character_set_system = utf-8; 5:またコマンドラインからテーブルの中を見れるようにCHCPを65001 に設定します。 6:表示用のPHPプログラムを走らせてみますが、英語と、スペイン語の特殊文字以外のアルファベットは表示されますが、特殊文字の部分は?となってしまいます。 UTF-8の代わりに Western Europe(Windows-1252/Windows Latin) というキャラクターセットも使って上の操作を繰り返してみましたが、ほとんど変わりません。 いったいどのような順序で、どのキャラクターセットを設定すればちゃんとしたスペイン語の表示が出来るのでしょうか? 詳しい方、どうかよろしくご教授の程、よろしくお願いいたします。 ちなみに、PCはWindows10 64ビット Xampp 7.3.11 からの データベースはversion 10.4.8-MariaDB PHPは Xampp とおなじ 7.3.11 です。

    • ベストアンサー
    • MySQL