使用CSV中的Java + mySQL INSERT特定的charset

时间:2010-11-22 00:00:50

标签: java mysql jdbc csv character-encoding

我有一点问题,我正在使用连接到mySQL数据库的Java应用程序从CSV文件构建数据库。

CSV是ISO-8859-1编码的。 它通过缓冲文件读取器读取并使用String方法解析。 然后通过JDBC驱动程序将字符串引入mySQL。

问题是:口音(这是法国申请)在转移中丢失了。在mySQL数据库中,它们是一种未识别的格式,不是UTF-8,也不是拉丁语-1 ...

我的假设是,字符串编码奇怪,并在重新插入时保持此编码。我怎样才能在Java中强制执行INSERT语句的字符集?

1 个答案:

答案 0 :(得分:4)

您需要确保使用InputStreamReader使用正确的字符集(这是文件本身之一,在此特定情况下为ISO-8859-1)读取CSV。

BufferedReader reader = new BufferedReader(new InputStreamReader(input, "ISO-8859-1"));

您还需要确保JDBC连接字符串包含带有正确charset的characterEncoding参数(该表是创建的表,您尚未在MySQL数据库中找到它)。如果它看起来是Unicode字符集,那么您还需要添加参数useUnicode=true

String url = "jdbc:mysql://localhost:3306/dbname?characterEncoding=UTF-8&useUnicode=true";

您的下一个问题可能是如何确定我的数据库表正在使用哪个字符集?。您可以使用SHOW命令执行此操作。它将包含有关charset的信息。

SHOW CREATE DATABASE dbname; -- shows CREATE DATABASE statement.
SHOW CREATE TABLE dbname.tblname; -- shows CREATE TABLE statement.

那就是说,与问题无关,您是否知道MySQL提供了内置的CSV导入工具,因此您不一定需要Java / JDBC?结帐LOAD DATA INFILE command。您可以将CSV文件的charset指定为命令参数,MySQL将担心正确的转换本身。