我正在使用JDBC执行查询“加载数据本地INFILE”加载csv文件到MySQL表。
csv文件包含有重音字符,如ä、ö、ü、ß。
我的问题是,德语字符不能插入到MySQL表通过执行查询“加载数据本地INFILE”通过JDBC或终端;但是,我可以通过执行“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
2条答案
按热度按时间jtjikinw1#
在我看来,您的CSV文件是用Latin-1(ISO 8859-1)编码的,而不是UTF-8。我该如何判断呢?
看看Ü是如何用一个字节
dc
编码的,这是拉丁语-1,如果它是UTF-8,它将被编码为c39c
。因此,将
LOAD DATA INFILE
命令中的CHARACTER SET UTF8
更改为CHARACTER SET latin1
,然后重试。6fe3ivhb2#
CSV文件以ANSI或其他非UTF8格式编码。请尝试以下操作:使用记事本++(代码编辑器)更改编码。在记事本++中,转到"编码“菜单--〉”转换为UTF-8“,然后保存为“。请使用”加载数据本地文件“重试。