web-dev-qa-db-ja.com

MySQLは、csvテーブルをインポートするときにUTF8文字列を無効にします

次の方法で.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;

.csvファイルは次のようになります。 enter image description here

しかし、次のエラーが表示され、その理由を説明できません。

Error Code: 1300. Invalid utf8 character string: 'M'

助言がありますか?

12
user7335295

exportの設定を確認してください。 「UTF-8」を探します。

This は、「切り捨てられたテキスト」がutf8mb4としてエンコードされていないデータが原因であることを示唆しています。 MySQLの外部では、「 "UTF-8"を探します。(内部では、MySQL、utf8およびutf8mb4はすべてのヨーロッパの文字セットに対して同等に機能するため、ü」は問題になりません。

"cp1252"(またはいくつかのエンコーディングのいずれか)としてエクスポートされた場合、üのバイトはutf8mb4で無効になり、切り捨てられます。

この分析が正しい場合、2つの解決策があります。

プランA:UTF-8としてエクスポートします。

プランB:latin1としてインポートします。 (列/テーブルの定義を変更する必要はありません。LOAD DATAのみを変更してください。)

11
Rick James

.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;
8
Ryan

テキストエディター(Nodepad ++など)でcsvファイルを開くだけです。

ファイルのエンコードをUTF-8に変更します

次に、csvファイルをインポートします

4
Ammar Bozorgvar

'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)

tf8文字のトラブル。保存されているものとは異なります

JDBC経由でUTF-8をMySQLに挿入しようとすると「不正な文字列値」?

2
davmos