2016-04-25 12 views
1

私はLOAD DATA INFILE MySQLコマンドを使用して、MySQLテーブルに挿入したいいくつかの行を含むcsvファイルを持っています。コマンドを使用すると、挿入が準備されているとき、挿入された特殊文字はすべて乱されます。ファイルには文字が正しく格納されています(EditPlusのようなエディタでファイルを開くと、特殊文字はすべて文字化けしますが、EmEditorのような別のエディタで開くと特殊文字が正しく表示されるため)。特殊文字がコラージュutf8_general_ciのテキストを保持し、varcharカラムまたはtextカラムのいずれかです。テーブルはInnoDBテーブルで、照合順序はutf8_general_ciに設定されています。私は、次のパラメータを使用して、MariaDBのコマンドラインから、LOAD DATA INFILEのコマンドを実行します。MySQLデータベースに特殊文字(cyrilic、chinese)

LOAD DATA INFILE '/path/to/csv/file' INTO TABLE tablename FIELDS TERMINATED BY '|' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; 

問題は何ができるかの任意のアイデア、そして可能な解決策は何ができますか?

ありがとうございます!

編集:私はまた、成功しません、LOAD DATA INFILE 1を使用する前に、SET NAMES "utf8";コマンドを使用してみました:|

+1

中国語の場合、 'utf8'の代わりに' utf8mb4'が必要な場合があります。いくつかの絵文字と漢字はutf8mb4でのみ利用できます。 (キリル文字もどちらでもうまく動作します) –

+0

漢字でさえも欺瞞の解決策で動作するようです。 –

+1

_ほとんどの漢字は 'utf8'で動作します。 4バイトのエンコーディングだけが失敗します。 –

答えて

1

MySQLは、ファイルを正しく読み取って解釈するために、ファイルが保存されているエンコーディング(文字セット)を知る必要があります。

サーバーは、ファイル内の情報 を解釈する character_set_databaseシステム変数で示される文字セットを使用しています。 SET NAMESおよびcharacter_set_clientの設定は の入力の解釈に影響しません。入力ファイル の内容がデフォルトと異なる文字セットを使用する場合は、 CHARACTER SET句を使用してファイルの文字セットを指定することが通常は です。 binaryの文字セットは、「何の 変換」を指定していない、実際に保存された、または明示的に文字を正しく解釈しないテキストエディタ(編集者から特定のエンコーディングで保存されているもの、あなたのファイルをエンコードする

図アウトすでに)、LOAD DATAステートメントにCHARACTER SET ...を追加します。詳細については、ドキュメントを参照してください。http://dev.mysql.com/doc/refman/5.7/en/load-data.html

+0

さて、 'LOAD DATA INFILE '/ path/to/csv/file'を試してみてください。INTO TABLE tablename CHARACTER SET UTF8 FIELDS BY '|' ENCLOSED BY '" 'LINES TERMINATED BY' \ r \ n '; 'それは完了するまでに数分(〜20)かかりますが、準備が整うとすぐに戻ってきます。 –

+0

これで解決しました。 –

1

あなたのファイルはおそらくUTF8ではありません。エディタで保存するときに、ファイルの文字エンコーディングがUTF8であることを確認します。エディタが文字を正しくレンダリングしても、UTF8として保存されるわけではありません。文字エンコーディングは、ファイルを保存するときのオプションで、メニューのどこかのファイルプロパティ(エディタによって異なります)です。

+0

Hmm。私はPostgreSQLのテーブルからMySQLのテーブルにデータを転送しているので、phpを使ってファイルを作成しました。私はこれを確認し、結果を取り戻す。 –

+0

もう一度EditPlusでファイルを開いたところ、文字がそこに正しく表示され、ファイルのエンコードがUTF8であると表示されます。だから、私はこれが問題だとは思わない:( –