【发布时间】:2017-04-12 14:01:31
【问题描述】:
我正在使用 JDBC 执行查询“LOAD DATA LOCAL INFILE”以将 csv 文件加载到 mysql 表中。
csv 文件包含重音字符,例如 ä,ö,ü,ß。
我的问题是德语字符无法通过 JDBC 或终端执行查询“LOAD DATA LOCAL INFILE”插入到 mysql 表中;但是,我可以通过执行“INSERT”或“UPDATE”语句来插入德语字符。
我一直在尝试各种不同的方法来弄清楚如下,但仍然无法工作:
对于 JDBC 连接我做了:
jdbc:mysql://${sequence.db.svr}/seq? connectTimeout=20000&useUnicode=yes&characterEncoding=utf8
对于“加载数据本地文件”我做了:
LOAD DATA LOCAL INFILE fileName
INTO TABLE tableName
CHARACTER SET UTF8
FIELDS TERMINATED BY ','
ENCLOSED BY '"';
String query = "LOAD DATA LOCAL INFILE '" + fileName +
"' INTO TABLE pde." + table +
" CHARACTER SET UTF8" +
" FIELDS TERMINATED BY ','" +
" ENCLOSED BY '\"'"
+ ";";
对于mysql数据库属性我做了:
ALTER DATABASE databaseName CHARACTER SET utf8 COLLATE utf8_unicode_ci;
对于mysql表属性我做了:
ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
创建表查询:
CREATE TABLE `testTable` (
`value` varchar(255) DEFAULT NULL,
`mapped_value` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
创建数据库查询:
CREATE DATABASE `testDatabase` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */
CSV 文件:
amÜ,amman
amàn,amman
十六进制的CSV文件:
616d dc2c 616d 6d61 6e0a 616d e06e 2c61 6d6d 616e 0a
【问题讨论】:
-
1) 在开头使用这个:
SET CHARACTER SET 'utf8'; SET collation_connection = 'utf8_general_ci'和 2) 检查您的输入文件是否以正确的编码创建(使用enca或file -i) -
@Alfabravo 你是对的。我的 csv 文件的编码不正确。我通过将 csv 文件编码更改为 utf8 来修复此错误。谢谢!
标签: mysql jdbc load-data-infile