2016-11-20 22 views
1

アラビア語のテキストデータを含む大きなテキストファイルがあります。私はそれをMySQLテーブルにロードしようとすると、エラーがError code 1300: invalid utf8 character stringと表示されます。これまでに試したことです:mysqlで無効なutf8文字列をバイパスする方法

LOAD DATA INFILE '/var/lib/mysql-files/text_file.txt' 
IGNORE INTO TABLE tblTest 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n'; 

私はこのエラーを無視しようとしましたが、動作しません。私はLOCAL INFILEを試しましたが、うまくいきませんでした。私のデータベースはDEFAULT CHAR SET UTF8DEFAULT COLLATE utf8_general_ciを使って作成されました。テキストファイルはutf-8がエンコードされています。

無効なutf8文字を含むレコードは欲しくないです。どのように私はそのような無効な文字を含むレコードを無視してデータを読み込むことができますか?

ありがとうございます!

答えて

2

これは、いたずら文字の16進数を持つのに役立ちます。

任意の不正な文字を扱う、その後、すべてのテキストを読むに可能なアプローチ:タイプVARBINARYまたはBLOBの列に

  1. 読みます。

  2. VARCHARまたはTEXTの列にコピーしようとすると、行をループします。

もう一つの計画は、utf8の代わりにutf8mb4を使用することです。悪いキャラクターは、utf8mb4では動作するが、utf8では動作しない絵文字または中国文字である可能性があります。

+0

姿を消している、私は、例えば、任意の例外をキャッチして、そのような例外が発生したときに実行するアクションを決定'ValueError:continue'のように続きます。しかし、このテクニックがMySQLで利用可能かどうかはわかりません。 – Mohammed

+0

'Update:' Python 'chars = {c for c textfile}'を使って、テキストファイルで利用可能なすべての文字をチェックしなければなりませんでした。私は 'regex'を使ってきれいにされたいくつかの奇妙な文字を見つけました。その後、 'MySQL load statement'はテキスト列の型として' utf-8'と 'text'を使って正常に動作しました。あなたの親切な助けに感謝してくれます。私は答えが受け入れられたものとしてマーキングしています。 – Mohammed

1

MySQL 5.7.14を使用するとこの問題が発生します。

私は、MySQL 5.6に戻り、この問題はPythonで

関連する問題