次の方法で.csvファイルをMySQLデータベースにインポートしたい:
load data local infile 'C:\\Users\\t_lichtenberger\\Desktop\\tblEnvironmentLog.csv'
into table tblenvironmentlog
character set utf8
fields terminated by ';'
lines terminated by '\n'
ignore 1 lines;
しかし、次のエラーが表示され、その理由を説明できません。
Error Code: 1300. Invalid utf8 character string: 'M'
助言がありますか?
exportの設定を確認してください。 「UTF-8」を探します。
This は、「切り捨てられたテキスト」がutf8mb4としてエンコードされていないデータが原因であることを示唆しています。 MySQLの外部では、「 "UTF-8"を探します。(内部では、MySQL、utf8およびutf8mb4はすべてのヨーロッパの文字セットに対して同等に機能するため、ü
」は問題になりません。
"cp1252"(またはいくつかのエンコーディングのいずれか)としてエクスポートされた場合、ü
のバイトはutf8mb4で無効になり、切り捨てられます。
この分析が正しい場合、2つの解決策があります。
プランA:UTF-8
としてエクスポートします。
プランB:latin1
としてインポートします。 (列/テーブルの定義を変更する必要はありません。LOAD DATA
のみを変更してください。)
.csvがUTF-8エンコーディングで保存されていることを確認するなど、私が試した他のことは何もしませんでした。
これはうまくいきました:
LOAD DATA LOCAL INFILE
を使用する場合、 https://dzone.com/articles/mysql-57-utf8mb4-and-the-load-に示すように、CHARACTER SET latin1
の代わりにCHARACTER SET utf8mb4
を設定しますデータ入力ファイル
ここに私のために働いた完全な例があります:
TRUNCATE Homestead_daily.answers;
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE Homestead_daily.questions;
SET FOREIGN_KEY_CHECKS = 1;
LOAD DATA LOCAL INFILE 'C:/Users/me/Desktop/questions.csv' INTO TABLE Homestead_daily.questions
CHARACTER SET latin1
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(type, question, created_at, updated_at);
SELECT * FROM Homestead_daily.questions;
テキストエディター(Nodepad ++など)でcsvファイルを開くだけです。
ファイルのエンコードをUTF-8に変更します
次に、csvファイルをインポートします
'M'
について文句を言っていますが、München
にあり、実際の問題のある文字はウムラウト'ü'
です。
テストする簡単な方法の1つは、最初の2行だけでファイルをロードしてみて、それが機能するかどうかを確認することです。次に、3行目を追加し、再試行して、失敗するかどうかを確認します。
データ内のこれらの特殊文字を置換できない、または置換したくない場合は、CSVファイル、データベース、テーブル、列、ツールなどで構成されている文字セットの調査を開始する必要があります...
MySQL 5.7以降を使用していますか?次に、character set utf8mb4
コマンドでload data
に変更するのが簡単です。
同様の問題については、 MySQL 5.7が 'utf8mb4'とLoad Data Infileを処理する方法 を参照してください。
以下も参照してください。
LOAD INFILEを使用して、geonames allCountries.txtをMySQL 5.7にインポート-エラー1300(HY000)