0

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

这是详细信息。原始文本文件以 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%";

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

- - - 更新 - - - -

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

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。这是这个问题的常见来源之一。

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

于 2010-02-03T00:37:05.823 回答