2

.csv ファイルをテーブルにインポートしようとしています。次のクエリを使用して挿入されたデータを取得する方法を理解しました。

LOAD DATA INFILE 'examplesofdata.csv' INTO TABLE coins FIELDS TERMINATED BY ',' 
ENCLOSED BY '' ESCAPED BY '\\'  IGNORE 1 LINES;

ただし、いくつかのフィールドでは、一連の ? として入力されるアラビア語のコンテンツがあります。これは、データベースを正しく照合していないか、LOAD DATA INFILE クエリを完全に理解していないためだと思います。アドバイスをいただければ幸いです。

SHOW CREATE TABLE コイン。出力は次のとおりです。

CREATE TABLE `coins` (
  `cat_num` int(11) NOT NULL,
  `reg_num` int(11) NOT NULL,
  `period` varchar(255) NOT NULL,
  `arb_period` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
  `ruler` varchar(255) NOT NULL,
  `arb_ruler` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
  `mint` varchar(255) NOT NULL,
  `arb_mint` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
  `date` varchar(255) NOT NULL,
  `weight` float NOT NULL,
  `diameter` float NOT NULL,
  `khedieval_num` varchar(255) NOT NULL,
  `ref` text NOT NULL,
 PRIMARY KEY  (`cat_num`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
4

7 に答える 7

4

LOAD DATA LOCAL INFILE 'filename' INTO TABLE tablename CHARACTER SET utf8 COLUMNS TERMINATED BY '\t' LINES TERMINATED BY '\n';

CHARACTER SET utf8がそのトリックを行います。

于 2013-06-23T11:18:04.843 に答える
2

これはまだ MySQL のバグです。しかし、データベースのデフォルトの文字セットが原因であることがわかりました。考えられる回避策は 2 つあります。

  1. データベースのデフォルトの文字セットを LATIN1 に変更すると機能します。テーブル/列を UTF-8 に保つことができます。
  2. 奇妙なことに、「CHARACTER SET latin1」を使用すると、UTF-8 と Latin1 の両方のテーブル/列で機能します。この方法では、db/table/column 文字セットを UTF-8 に保つことができます。
于 2011-01-15T07:25:07.087 に答える
1

そのため、データベースクラスの古いインストラクターから回答を得ることになりました。彼は、この問題は実際には MySQL の現在のバージョンで報告されたバグであり、現時点で唯一知られている解決策は、PHP または別のスクリプト言語を使用して手動でデータをインポートすることだと言いました。

この問題のバグはhttp://bugs.mysql.com/bug.php?id=10195にあります。

私はプロトタイプに取り組んでいただけで、その間に回避策を管理していたので、あまり役に立ちませんでしたが、うまくいけば、それがあなたにとってもっと役立つことを願っています.

于 2010-02-18T16:44:13.860 に答える
0

CHARACTER SET utf8_unicodeまたはあなたのロケールに設定するのはどうですか?

于 2010-01-26T02:35:43.087 に答える
0

また、 character_set_client も UTF-8 である必要があることがわかりました。

mysql> show session variables like 'char%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | latin1                        
...

who サーバーまたはセッションのみの変更方法については、mysql のドキュメントを参照してください。

于 2011-01-17T19:06:09.790 に答える
0

ステートメントに追加CHARACTER SET utf8することLOAD DATAが最も近い答えです。しかし、他に2つの問題が提起されました...

utf8/utf8mb4 を使用しようとしたときに、クエスチョン マーク(黒いひし形ではなく通常のもの) が表示される場合は、

  • 格納されるバイトは utf8 としてエンコードされません。これを修正します。
  • データベースの列はCHARACTER SET utf8(または utf8mb4) です。これを修正します。
  • また、読み込み時の接続がutf8であることを確認してください。

utf8/utf8mb4 を使用しようとしたときに、切り捨てられたテキストが表示される場合は、

  • 格納されるバイトは utf8 としてエンコードされません。これを修正します。
  • また、読み込み時の接続がutf8であることを確認してください。
于 2016-06-18T08:04:57.993 に答える