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

时间:2017-06-08 22:23:27

标签: mysql csv utf-8

我尝试将以下带有UTF-8编码的CSV文件导入MySQL,但中文字符填写不正确。我还将列整理更改为utf8 - 默认排序规则和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

2 个答案:

答案 0 :(得分:3)

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

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

一般情况下,MySQL用户应始终瞄准utf8mb4,但big5可以。

排版与插入无关,除非您有唯一性约束。 (似乎你没有这样的人。)

如果你说数据有一个编码(例如,big5),但是列的编码不同(例如,utf8mb4),那么MySQL会在插入时进行转换。

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

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

答案 1 :(得分:1)

用于解决方案的查询:

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')