みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

CSVファイルのデータが、データベース上で文字化け

CSVファイルのデータが、データベース上で文字化けする現象を解決したい!
CSVファイルは、任意の場所にFTPソフトを使用してアップロードし、プログラム上でCSVを読み込むという手順です。

■開発関係情報
phpは使用しておらず開発はperlを使用
開発プログラムの文字コードはEUC-JPで、出力されるHTMLの文字コードはShift-JISです。


(1)hetemlに設置した場合は正常に動作しました。
予め作成されていたデータベースのエクスポートファイルをインポートしてテーブルを作成しましたがインポート時のファイルの文字セットは「utf8」で、コーディングへの変換は「non」で実行しています。

MySQLバージョン:5.0.82
MySQLの文字セット:UTF-8 Unicode(utf8)
MySQLの接続照合順序:utf8_unocode_ci
phpMyAdmin - 2.11.11.3
MySQL クライアントのバージョン: 4.0.25


(2)無料のレンタルサーバー(国外)に設置すると文字化けします。
(1)と同じ手順で行うと、データベース上でCSVデータの日本語が文字化けします。

MySQLバージョン:5.1.65-cll
MySQLの文字セット:UTF-8 Unicode(utf8)
MySQLの接続照合順序:utf8_unocode_ci
phpMyAdmin - 3.4.11.1
MySQL クライアントのバージョン: 4.1.22

そこでCSVをFTPでアップせずデータベースでインポート(ファイルの文字セット:utf-8、エンコーディングの変換なし)しようとすると「CSV入力のカラム数が不正です」というエラーになります。
色々と調べていると、文字コードをすべてEUCに統一すると文字化け解決と書いてあったので、CSVファイル・MySQLの接続照合順序・インポートするときの文字セットなどの思い当るところ全てをEUCに指定して、エンコーディングへの変換を「EUC」に「全角カナへ変換する」にチェックを入れて実行してみても、やはり「CSV入力のカラム数が不正です」エラーになります。

この時、フォーマット項目で「LOAD DATA文を使用したCSVの読み込み」を選択し、特有のオプションで「カラムの終端記号」を「,」「カラム囲み記号」を「"」に設定して、CSVファイルでは区切りを「,」と「","」の2パターンで試しても同じエラーでした。

また、気になる点としては、MySQLの文字セットはUTF-8のままでどうやって変更するのかがわかりません。
開発にphpは使用していなくても、phpmyadminを使用しているということはphp.iniの設定が必要ですよね?
php.iniの設定は、権限が与えられていなければサーバー側で設定を行ってもらう必要があるのでしょうか?(初歩的な事ですみません)

試行錯誤していますが、解決法が分からず困っています。
どなたかご教示いただけませんでしょうか。
何卒よろしくお願い致します。

投稿日時 - 2012-10-19 19:12:43

QNo.7756365

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

一部、可能性のもので申し訳ありません。

海外のレンタルサーバー、特に、無料レンタルサーバーは
もともと日本語に対応していません。
広告のHTMLも出力する関係から、キャラクターセットの
HTTPヘッダーを固定で出力する可能性がある為に
難しい場合があります。

可能性としてできるとしたら、以下のとおりです。
・Content-type: text/html に charset= を追加する
・スクリプトコードから出力まで完全にUTF8にする
 (必要な部分のみEUCに変換する形とする)
・↑でもだめなら、UTF8のエスケープコードか、unicode(UTF16)のエスケープコードで出力する
 UTF16のエスケープは、perlコードかJavaScriptコードだと、以下のURLのようになります
 http://www.daiba.cx/Perl%e3%83%a1%e3%83%a2/perl%e3%81%a7%5cuXXXX%e5%bd%a2%e5%bc%8f%e3%81%abunicode%e3%82%a8%e3%82%b9%e3%82%b1%e3%83%bc%e3%83%97%e3%81%99%e3%82%8b/

投稿日時 - 2012-10-19 19:50:25

あなたにオススメの質問