MySQL加载数据到文件UTF8编码

标签 mysql utf-8 character-encoding

我正在尝试将 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 格式的 E28093E28094。还有其他事情正在发生。

更多

所有这三个都需要设置相同:character_set_clientcharacter_set_connectioncharacter_set_results

关于MySQL加载数据到文件UTF8编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48687022/

相关文章:

php - 匹配数据库中的值并使用 codeigniter 获取该行中的所有数据

php - 取消转义 PHP 中在 AS3 中转义的字符串

utf-8 - 如何在只有部分编码错误的情况下转换文件?

javascript - 使用减号更改 url 中的空格

mysql JOIN 在 JOIN 内部并搜索 group_concatenated 值

php - 页面加载时显示查询结果

php - MAMP 无法升级 mysql 数据库

python - Unicode 问题,在 python 中正确解码/编码字符串

php json_encode utf8 字符问题(mysql)

c# - 在 C# 中使用反斜杠符号转义 unicode 字符串