我正在使用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)并尝试使用与上面相同的命令导入它。但是我仍然有相同的编码问题。
我也试过了,但没有运气:
仍然完全感到困惑:((
答案 0 :(得分:0)
如您的重复问题所述,请确保您的表和连接均使用UTF-8。这是这个问题的常见来源之一。