我正在尝试将 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 控制台中输入插入命令,它将被正确插入:
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
您知道吗,我还可以尝试使用正确的编码将文件加载到数据库中吗?
最佳答案
您似乎在数据流中的某个位置具有字符集 cp850
。
请提供
显示创建表
- 连接MySQL时的连接参数。
还要验证传入的数据是否实际编码为 UTF-8
。
获取该列的HEX()
——û
是十六进制C3BB
; endash 和 emdash 是 utf8 格式的 E28093
和 E28094
。还有其他事情正在发生。
更多
所有这三个都需要设置相同:character_set_client
、character_set_connection
和 character_set_results
。
关于MySQL加载数据到文件UTF8编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48687022/