0

mysqlimportを使用して、.txtファイルからMySQLデータベーステーブルにデータをインポートしています。OK(エラーメッセージなし)をインポートしているように見えますが、表示すると非常に奇妙に見え、期待どおりに検索できません。

詳細はこちらです。元のテキストファイルはUTF-8に保存され、レコードは(テキストエディタで)次のようになります。2番目のフィールドには改行が含まれます。

WAR-16,52 ~~~~~ Lorem ipsum dolor sit.
Lorem ipsum dolor sit.
~~~~~ ENDOFRECORD
WAR-16,53~~~~~Lorem ipsum dolor sit.
Lorem ipsum dolor sit.
Lorem ipsum dolor sit.
Lorem ipsum dolor sit.

~~~~~ ENDOFRECORD

インポートするデータベーステーブルは非常に単純です。

+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id    | varchar(100)  | YES  |     | NULL    |       |
| text  | varchar(5000) | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

ファイルをインポートするとき、使用するコマンドは次のとおりです。

$ mysqlimport -u root db textfile.txt --fields-terminated-by="~~~~~" --lines-terminated-by="ENDOFTHELINE" --default-character-set='utf8'
db.records_list: Records: 18778  Deleted: 0  Skipped: 0  Warnings: 18787

次に、MySQLにレコードを表示するように依頼した場合に表示される内容は次のとおりです。

mysql> select * from textfile;
| 
 W A R - 1 6 , 5 2 |  L o r e m  i p s u m  d o l o r  s i t .
L o r e m  i p s u m  d o l o r  s i t .
(etc)

そのため、スペースまたは奇妙なエンコーディングエクストラがテキストに追加されているように見えます。

そして、データベースクエリの問題は次のとおりです。

mysql> select * from textfile where id like "%WAR%";

何も返しません。また、スペースを追加することもありません。

mysql> select * from textfile where id like "%W A R%";

このコマンドだけが何かを返します

mysql> select * from textfile where id like "%W%";

誰かが何が起こっているのか推測できますか?エンコーディングの問題だと思いますが、うまくいきません。

- - - アップデート - - - -

OK、データベースと接続エンコーディングを確認しました。

mysql> show variables like "character_set_%";
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | latin1                                 |
| character_set_connection | latin1                                 |
| character_set_database   | latin1                                 |
| character_set_filesystem | binary                                 |
| character_set_results    | latin1                                 |
| character_set_server     | latin1                                 |
| character_set_system     | utf8                                   |
| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
8 rows in set (0.01 sec)

そしてshow table status、テーブルはですと言いますlatin1_swedish_ci

「Western(Windows Latin 1)」(Snow LeopardでTextEditを使用)のテキストファイルを再保存し、上記と同じコマンドを使用してインポートしようとしました。しかし、私はまだ同じエンコーディングの問題を抱えています。

私も試してみましたが、運が悪かったのです。

  • UTF-8を使用して新しいテーブルを作成し、既存のファイルをインポートします
  • 以前に正常にインポートした別のテキストファイルにテキストをコピーして貼り付け、それをインポートしようとしています。

まだ完全に困惑している:(((

4

1 に答える 1

0

重複した質問に記載されているように、テーブルと接続の両方が UTF-8 を使用していることを確認してください。これは、この問題の一般的な原因の 1 つです。

http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html

于 2010-02-03T00:37:05.823 に答える