2010-11-22 19 views
3

我有一个小问题,我使用连接到mySQL数据库的Java应用程序从CSV文件构建数据库。从CSV插入Java + mySQL的特定字符集

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

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

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

回答

4

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

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

你还需要确保JDBC连接字符串包含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文件的字符集作为命令参数,MySQL会担心正确的转换本身。

+0

非常感谢,解决了它! – 2010-11-22 23:17:14

+0

不客气。 – BalusC 2010-11-23 02:48:37