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

fjaof16o  于 2023-01-20  发布在  Mysql
关注(0)|答案(2)|浏览(191)

我正在使用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
jtjikinw

jtjikinw1#

在我看来,您的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

看看Ü是如何用一个字节dc编码的,这是拉丁语-1,如果它是UTF-8,它将被编码为c39c
因此,将LOAD DATA INFILE命令中的CHARACTER SET UTF8更改为CHARACTER SET latin1,然后重试。

6fe3ivhb

6fe3ivhb2#

CSV文件以ANSI或其他非UTF8格式编码。请尝试以下操作:使用记事本++(代码编辑器)更改编码。在记事本++中,转到"编码“菜单--〉”转换为UTF-8“,然后保存为“。请使用”加载数据本地文件“重试。

相关问题