使用“LOAD DATA LOCAL INFILE”加载包含重音字符的 csv 文件

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)

O. *_*nes 5

在我看来,您的 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并重试。