将文本导入MySQL:奇怪的格式

时间:2010-02-02 23:19:23

标签: mysql mysqlimport

我正在使用mysqlimport将.txt文件中的一些数据导入MySQL数据库表。它似乎导入OK(没有错误消息),但在显示时看起来很奇怪,并且无法按预期搜索。

以下是详细信息。原始文本文件以UTF-8保存,其中的记录(在文本编辑器中)如下所示。第二个字段包括换行符:

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%";

谁能猜出可能会发生什么?我觉得它一定是编码问题,但我无法解决。

------ UPDATE --------

好的,我已经检查了数据库和连接编码。

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创建新表并导入现有文件
  • 复制&将文本粘贴到我之前导入的另一个文本文件中,然后尝试导入该文件。

仍然完全感到困惑:((

1 个答案:

答案 0 :(得分:0)

如您的重复问题所述,请确保您的表和连接均使用UTF-8。这是这个问题的常见来源之一。

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