Yi *_*hao 2 mysql jdbc load-data-infile
我正在使用 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
Run Code Online (Sandbox Code Playgroud)
对于“加载数据本地文件”,我做了:
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 '\"'"
+ ";";
Run Code Online (Sandbox Code Playgroud)
对于 mysql 数据库属性,我做了:
ALTER DATABASE databaseName CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
对于 mysql 表属性,我做了:
ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
创建表查询:
CREATE TABLE `testTable` (
`value` varchar(255) DEFAULT NULL,
`mapped_value` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
创建数据库查询:
CREATE DATABASE `testDatabase` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */
Run Code Online (Sandbox Code Playgroud)
.csv文件:
amÜ,amman
amàn,amman
Run Code Online (Sandbox Code Playgroud)
十六进制 CSV 文件:
616d dc2c 616d 6d61 6e0a 616d e06e 2c61 6d6d 616e 0a
Run Code Online (Sandbox Code Playgroud)
在我看来,您的 CSV 文件是用 Latin-1 (ISO 8859-1) 而不是 utf-8 编码的。我怎么能说这个?
a m Ü , a m m a n \n a m à n , a m m a n \n
61 6d dc 2c 61 6d 6d 61 6e 0a 61 6d e0 6e 2c 61 6d 6d 61 6e 0a
Run Code Online (Sandbox Code Playgroud)
看看 Ü 是如何仅用一个字节编码的,dc?那是拉丁语 1。如果它在 utf-8 中,它将c39c改为编码。
因此,将CHARACTER SET UTF8您的LOAD DATA INFILE命令更改为CHARACTER SET latin1并重试。