【发布时间】:2018-02-08 13:46:50
【问题描述】:
我正在尝试将数据从 utf8 编码的文本文件插入到 utf8 编码的 mysql 数据库中。
我尝试插入的文本文件中的一行如下所示:
<http://dbpedia.org/resource/Canada_(New_France)> <http://purl.org/dc/terms/subject> <http://dbpedia.org/resource/Category:History_of_Canada_(1534–1763)> .
要将文件加载到数据库中,我使用以下命令:
LOAD DATA LOCAL INFILE 'path/to/file'
INTO TABLE table_name
CHARACTER SET utf8
FIELDS TERMINATED BY ' '
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(s, @p, o)
COMMIT;
创建表命令如下所示:
CREATE TABLE `article_categories3` (`s` varchar(511) NOT NULL, `o` varchar(511) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8
不幸的是,数据库中的结果条目如下所示:
| <http://dbpedia.org/resource/Canada_(New_France)> | <http://dbpedia.org/resource/Category:History_of_Canada_(1534û1763)> |
'-' 被 'û' 取代。 其他特殊字符也是如此,例如 'ï' 被替换为 '´'。
mysql 显示这些字符集:
Server characterset: utf8
Db characterset: utf8
Client characterset: latin1
Conn. characterset: latin1
character_set_results: latin1
使用命令 \C utf8 将客户端和连接字符集和 character_set_results 更改为 utf8 会导致:
<http://dbpedia.org/resource/Category:History_of_Canada_(1534ÔÇô1763)>
<http://dbpedia.org/resource/Category:Oïl_languages>
将它们更改为 cp850 会导致:
<http://dbpedia.org/resource/Category:History_of_Canada_(1534?1763)>
<http://dbpedia.org/resource/Category:Oïl_languages>
因此,使用此设置 'ï' 显示正确。
我还尝试编写一个小 java 程序,将文件中的行插入到数据库中,但我使用这种方法遇到了相同的结果。
但是如果我在 mysql-console 中手动输入插入命令,它会被正确插入:
INSERT INTO table_name VALUES ('<http://dbpedia.org/resource/Canada_(New_France)>', '<http://dbpedia.org/resource/Category:History_of_Canada_(1534–1763)>');
条目的十六进制代码是:
3C687474703A2F2F646270656469612E6F72672F7265736F757263652F43617465676F72793A486973746F72795F6F665F43616E6164615F2831353334E2809331373633293E
(在这里结束E28093)
和
3C687474703A2F2F646270656469612E6F72672F7265736F757263652F43617465676F72793A4FC3AF6C5F6C616E6775616765733E
我像这样检查了文本文件的编码:
file -i test.ttl
test.ttl: text/plain; charset=utf-8
你有什么想法,我还能尝试用正确的编码将文件加载到数据库中吗?
【问题讨论】:
-
获取该列的
HEX()--û是十六进制的C3BB; endash 和 emdash 在 utf8 中是E28093和E28094。其他事情正在发生。此外,ï和´没有直接映射。 (所以,发生了什么并不明显;HEX应该会有所帮助。)
标签: mysql utf-8 character-encoding