テキストファイルからのデータ入力で文字化けが起こる

このQ&Aのポイント
  • Windows Vista 64bitでMySQLを使用してテキストファイルからデータを入力する際に、文字化けが発生しています。
  • テキストファイルの文字コードや改行コードの設定が適切であるにもかかわらず、入力されるデータの一部がアルファベット以外の文字に置き換えられています。
  • 入力ファイルをWindowsフォーマットで保存すると、さらに文字化けが起こる可能性があります。
回答を見る
  • ベストアンサー

テキストファイルからのデータ入力の文字化け

windows Vista 64bitで mySQL ver14.14 for 32bit win を最近導入しました。 非常に初歩的なステップなのですが、テキストファイルからテーブルにデータを入れると文字化けが起こってしまい、困っています。 mysql> create database user_db ; mysql> use user_db; mysql> create table mytable( -> name text, -> sex text, -> addr text -> ); テキストファイル(input_data.txt)はutf-8、unix format(これは改行コードのことだと思います)で abcd female amsterdam efgh male detroit ijkl male tokyo というふうに作成し、 mysql> load data infile 'C:/input_data.txt' -> into table mytable; mysql> SELECT name,sex,addr FROM mytable; とすると +-------+------+-----+ |name___|sex___|addr_| +-------+------+-----+ |???abcd|female|amsterdam |efgh___|male__|detroit |ijkl___|male__|tokyo と一行目のデータのはじめの値の???部分がアルファベット以外の妙な文字3文字に置き換わります。 2行目3行目は問題ないようです。 文字コードの設定はconfig wizardでutf-8としており、 mysql>status で server characterset:utf-8 Db characterset:utf-8 Client characterset:utf-8 Conn. characterset:utf-8 と表示されます。 また、いろいろ試したところテキストエディタで入力ファイルをwindowsフォーマットで保存すると1行目に加え、2行目も文字化けするようです。 改行コードに関係することなのかもしれませんが、原因・解決方法がわかりません。 どなたか解決方法がわかりましたらアドバイスよろしくお願いします。

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

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

  • ベストアンサー
  • mattalix
  • ベストアンサー率62% (47/75)
回答No.1

BOMがついてるんでしょう。 UTF-8なら先頭の3 bytesがEF BB BFなら読み飛ばすということで。 BOMの一覧は下記参照 http://en.wikipedia.org/wiki/Byte-order_mark

hydrozoa
質問者

お礼

BOMというのは初めて知りました。 BOMの読み飛ばしという方向で調べてみます。 ありがとうございました。

関連するQ&A

  • UTF-8にしても文字化けが直らない

    XAMPPでPHPとMySQLを使っています。 しかし、そのまま使うと文字化けが起きてしまいます。調べると「UTF-8」にすることで文字化けが起こらないとのことなので変更をし、以下のように全てutf-8に書き換えることができました。 mysql> show variables like 'char%' -> ; +--------------------------+----------------------------------------+ | 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 | D:\program\xampp\mysql\share\charsets\ | +--------------------------+----------------------------------------+ しかし、それでも文字化けは直りませんでした。以下のコマンドで原因を確かめてみました。 mysql> use testdb; Database changed mysql> status -------------- Server characterset: utf8 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 Db characterset: latin1が原因だと思い、以下のコマンドを実行しました。 alter database testDB character set utf8; そしてもう一度テーブルを作りなおすと今度は文字化けどころか空白になってしまいました。 なにが原因で文字化け等が起こっているのか分かりません。助けてください。 OSは Windows Vista です。 バージョンは ApacheFriends XAMPP version 1.7.7 + Apache 2.2.21 + MySQL 5.5.16 (Community Server) + PHP 5.3.8 (VC9 X86 32bit thread safe) + PEAR です。 回答よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLの文字化けが直りません。

    MySQLの文字化けが直りません。 CentOS5.4+Apache2.0+ PHP 5.1.6 MySQL Server, Client とも 5.0.77 を使用しています。 設定は次の通りですが、Windows7 のクライアント機から見ると文字化けしてしまいます。 # mysql -p root -p*** (エラーを生じさせてみる) ERROR 1049 (42000): 'root' 、ハ、?ニ・ヌ。シ・ソ・ル。シ・ケ、マテΤ熙゛、サ、・ ************************************************** mysql> status Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 -------------- php.ini は次の設定です。 1123 [mbstring] 1125 mbstring.language = Japanese 1130 mbstring.internal_encoding = UTF-8 1133 mbstring.http_input = auto 1137 mbstring.http_output = UTF-8 1144 mbstring.encoding_translation = Off 1148 mbstring.detect_order = auto 1152 mbstring.substitute_character = none; 文字化けを直すにはどのようにすれば良いでしょうか?

    • ベストアンサー
    • MySQL
  • さくらサーバでの文字化け

    以前にも質問をさせていただいたのですが解決しなかったので再度投稿させていただきます。 下記環境にて携帯サイトを作成しております。 さくらレンタルサーバ(スタンダードプラン) MySQL 5.1(2010-12-15時点で最新のもの) PHPコード UTF-8 ver.5.2.14 テンプレートコード UTF-8 smarty使用 $hoge = mb_convert_encoding( $hoge, 'SJIS-win', 'UTF-8' ); $smarty->assign ( 'contents', $hoge ); 上記のような感じでsmartyにアサインする変数をUTF-8からSJIS-winに変換して表示するようにしています。 テンプレート表示周りは問題ないのですが、DBからSELECTしたデータや、新たにINSERTするデータが"??"という感じで文字化けを起こしてしまいます。 なお、INSERTにつきましては、フォームから受け取るデータを $query = mb_convert_encoding( $_GET[$value], 'UTF-8', 'SJIS-win' ); といった感じでUTF-8に戻しております。 また、PDOを使用しておりますので、SET NAME(セキュリティ上NGなようなのでそもそも使用したくない)、mysql_set_charset()を入れる場所がわからず。。 ちなみにteratermから見たDBのコードが… Server characterset: ujis Db characterset: utf8 Client characterset: ujis Conn. characterset: ujis となっています。 \C utf8と打ち、Server charcterset以外はutf8にできるのですが、一度terminalを切りまた確認するとujisに戻ってしまいます。。 ※phpMyAdminで見ると照合順序:utf8_general_ci、MySQLの文字セット:UTF-8 Unicode(utf8)と表示されております。 諸々調べたのですが、現状上記環境を使用している以上、UTF-8での作成は不可能なのでしょうか? ご教示いただけますよう何卒宜しくお願い致します。

    • ベストアンサー
    • PHP
  • テキストデータを合成するプログラム

    テキストデータの合成 私業務で必要なプログラムなどを片手間に作っています。 超簡単なマクロなどを組めるスキルのレベルです。 テキストデータの合成を行っています。 エディタでコピペすれば済むといえば済むのですが、 実際はデータの数が多く手作業ではミスなども起きやすいのでできればプログラム化したいと考えています。 やりたいことは・・・ 【元データ】 下のような3つのテキストファイルがあります a.txt 1234 abcd ABCD b.txt 5678 efgh EFGH c.txt 9012 ijkl IJKL これらを行ごとに合成して 【結果】 d.txt 123456789012 abcdefghijkl ABCDEFGHIJKL のようなファイルを作成します。 VBScriptかExcelのVBAで簡単にできないかなと思い、 取り組んだのですがなかなか筋道が立ちません。 アドバイスよろしくお願いします。

  • MySQLで日本語を出力すると文字化け(?)します。

    初めまして、MySQLの日本語の取り扱いについて悩んでいます。 この手の質問の過去ログをいろいろ漁ってみて、試してみたのですが、 やり方が悪いのか解決には至りませんでしたので質問させていただきます。 MySQLのバージョンは5.0で、phpMyAdminは2.9です。また、PHPのバージョンは5.1です。 OSはWindwos XPです。 status等で文字コードを確認したところ、以下のようでした。 Server characterset : sjis Db characterset : sjis Client characterset : sjis Conn.characterset : sjis また、phpMyAdminの「MySQLの文字セット」にはUTF-8 Unicode (utf8) とあります(この時点で十分謎です;;)。 このような環境で、以下のようなテーブルを作成し、ブラウザに「日本語。」と出力してみたところ、????と出ました。 どなたかのご教授を得られれば幸いです。 よろしくお願いします。

  • mySQL 4.0で文字化け

    はじめまして、PHP+mySQLでプログラムを勉強中の初心者です。 PHPからインサートした日本語データをphpmyadminで確認するとデータが化けています。SQL文自体をPHPで表示させると文字化けせずにちゃんと表示されます。  mySQL 4.1以降なら SET NAMESというコマンドをDB接続後に入れることで問題が回避できると言うことですが、mySQL 4.0ではコマンドエラーになってしまいます。 レンタルサーバーなので、PHPのアプリケーション側で対応できたらと考えています。 何かよい方法がないでしょうか? PHP 4.3.11は mySQL 4.0.27です。 PHPのキャラクターはutf-8, mySQLのCharactersetは latin1となっていました。 よろしくお願いします。

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

    PHPでINSERTしたものをphpMyadminで確認すると 日本語が文字化けしています。 コマンドプロンプトでテーブルを見てみると文字化けは起こっていません。どこを変えればいいのでしょうか? いろんなサイトを参考にmy.iniを直してみてもだめでした。 ----- my.ini ------ [mysqld] default-character-set = utf8 skip-character-set-client-handshake character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 skip-character-set-client-handshake [mysqldump] quick max_allowed_packet = 16M default-character-set = utf8 [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates default-character-set = utf8 ----- phpMyadmin ----- テーブルの照合順序 utf8_general_ci mysql> \s Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 バージョンは以下のとおりです。 XAMPP 1.7.1 MySQL 5.1.33 PHP 5.2.9 phpMyadmin

    • ベストアンサー
    • MySQL
  • mysqlの文字コードの変更方法について教えてください。

    /etc/my.cnfの[mysqld]と[mysql]にdefault-character-set = utf8を 追記したのですが、statusで確認すると Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 とサーバー側の文字コードが変更できていません。 ネットや本で調べてみたのですがわからず、困っております。 どなたか分かる方よろしくお願いいたします。

  • phpMyAdmin内での文字化け

    サーバはさくらインターネットを利用してます。 レンタルサーバから専用サーバに移転したのですが、 専用サーバではphpMyAdminで日本語データの文字化けが起きます。 専用サーバのphpMyAdminからDB作成の際、下記の設定で行い、 MySQLの文字セット UTF-8 Unicode (utf8) MySQLの接続照合順序 utf8_unicode_ci DB の照合順序 utf8_unicode_ci レコードをINSERTする際、下記のように文字コードを指定し、 $sql=mb_convert_encoding($sql,"EUC-JP","EUC-JP"); execute_sql($con, $sql); 実行したら、phpMyAdmin内で日本語データが文字化けしました。 サイト内で表示しているDBデータ(日本語)は文字化けしませんでした。 DB の照合順序をutf8以外(ujis_japanese_ciなど)として、 DBを作った場合、レコードをINSERTしたら、サイト内のDBデータも phpMyAdmin内データもどちらも日本語が文字化けします。 また、レンタルサーバのphpMyAdminからDBデータをエクスポートして、 専用サーバのphpMyAdminからインポートした場合、 読み込むDBデータファイルの文字コードをUTF-8にしなければ、 phpMyAdmin内で日本語データが文字化けしてしまいます。 ただ、UTF-8にしてインポートしてもphpMyAdmin内では 文字化けしませんが、サイト内で表示しているDBデータは 文字化けします。 専用サーバのphpMyAdminから データを日本語の文字列に編集・更新したら、 phpMyAdmin内ではそのデータに関しては文字化けなく表示されますが、 サイト内ではそのデータは文字化けしてしまいます。 専用サーバ情報は下記の通りです。 【専用サーバ】 OS:CentOS 5 Apache 2.2.3 PHP5.1.6 DBサーバ:MySQL 5.0.77 アップしているファイルの文字コード:EUC 分かる方、ご回答、よろしくお願いいたします。

    • 締切済み
    • PHP
  • MySQL4.1における文字化けについて

    WindowsXPにてMySQL4.1.12aをインストールしました。 JDBCにて、 Class.forName("com.mysql.jdbc.Driver").newInstance(); String connStr = "jdbc:mysql:///databasename?user=root&password=pass" + "&useUnicode=true&characterEncoding=Shift_JIS"; とし、insertでCSVファイルから特定の項目を追加していくということをしました。 clientにてselectしてみたら、2バイト文字がすべて 「?」に変わっていました。 my.iniにて [mysqld] default-character-set = sjis [client] default-character-set = sjis [mysql] default-character-set = sjis を追加していますが、 statusで見ると mysql> status -------------- mysql Ver 14.7 Distrib 4.1.12a, for Win32 (ia32) Connection id: 1 Current database: shop Current user: root@localhost SSL: Not in use Using delimiter: ; Server version: 4.1.12a-nt Protocol version: 10 Connection: localhost via TCP/IP Server characterset: sjis Db characterset: utf8 Client characterset: latin1 Conn. characterset: latin1 TCP port: 3306 Uptime: 30 sec となっています。 utf8、latin1というのが文字化けの原因でしょうか。 対策方法をご教授お願いいたします。

    • ベストアンサー
    • MySQL