如何将带有中文字符的 CSV UTF-8 文件导入 MySQL?

Posted

技术标签:

【中文标题】如何将带有中文字符的 CSV UTF-8 文件导入 MySQL?【英文标题】:How can I import CSV UTF-8 file with Chinese characters into MySQL? 【发布时间】:2017-11-10 19:19:28 【问题描述】:

我已尝试将以下采用 UTF-8 编码的 CSV 文件导入 mysql,但无法正确填充中文字符。我还将列 collat​​e 更改为 utf8 - default collat​​ion 和 big5-big5_chinese_ci ,但数据仍然没有填充正确的字符。

我正在尝试导入的数据: Data I'm trying to import into MySQL

我用来导入数据的 SQL 查询:

LOAD DATA LOCAL INFILE 'C:\\Users\\Ulises.Sotomoyor\\Downloads\\Insights.csv' 
INTO TABLE unpaid_media.insights
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(@Date, Section, Language, Insights)
SET Date = str_to_date(@Date, '%m/%d/%Y')

MySQL 表设置/整理: MySQL Table Setting/Collation

【问题讨论】:

【参考方案1】:

您需要指定(至少)两件事:

传入数据的字符编码。 -- 通过在LOAD DATA 语句中添加CHARACTER SET utf8mb4(或big5)来明确执行此操作。 列的CHARACTER SET -- 它可以是big5utf8mb4。这不必与LOAD 匹配。

一般来说,MySQL 用户应该始终以utf8mb4 为目标,但big5 也可以。

除非您有唯一性约束,否则插入时排序规则无关紧要。 (你好像没有。)

如果您说数据具有一种编码(例如 big5),但该列采用不同的编码(例如 utf8mb4),MySQL 将在您插入时进行转换。

您可能会遇到其他麻烦。请参阅 http://***.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored 中的“最佳实践”。它针对 utf8,但可以修改为导入 big5 和/或在 big5 中显示。

如果遇到更多麻烦,请尝试获取有问题的字符串/列的十六进制。

【讨论】:

这成功了!太感谢了。考虑到这是我的第一篇 Stack Overflow 帖子,我感到非常兴奋。【参考方案2】:

用于解决方案的查询:

LOAD DATA LOCAL INFILE 'C:\\Users\\Ulises.Sotomoyor\\Downloads\\Insights.csv'
     INTO TABLE unpaid_media.insights
     CHARACTER SET utf8mb4
     FIELDS TERMINATED BY ',' 
     ENCLOSED BY '"' 
     LINES TERMINATED BY '\r\n'
     IGNORE 1 LINES
     (@Date, Section, Language, Insights)
     SET Date = str_to_date(@Date, '%m/%d/%Y')

【讨论】:

以上是关于如何将带有中文字符的 CSV UTF-8 文件导入 MySQL?的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有中文字符的 Excel 文件导出为 CSV?

将 .csv 导入 R 时出现 UTF-8 编码错误?

phpmyadmin 导入带有符号的 csv

使用 UTF-8 编码,具有特殊属性/外来字符的 CSV 文件在导入 MySQL (phpMyAdmin) 时不保留

如何将带有 YYYYMMDD 列的 CSV 文件导入 ClickHouse 中的 DATE 列

SAS - 从带有科学计数法数字的csv文件导入时如何保留实际数字