我有一个小问题,我正在使用连接到MysqL数据库的Java应用程序从CSV文件构建数据库.
CSV是ISO-8859-1编码的.
通过缓冲的文件读取器读取它,并使用String方法进行解析.
然后,这些字符串通过JDBC驱动程序引入到MysqL中.
问题是:调音中丢失了重音(这是法语应用程序).在MysqL数据库中,它们采用的格式不明,既不是UTF-8,也不是Latin-1 …
我的假设是,字符串被奇怪地编码,并且在重新插入时保持这种编码.如何在Java中为INSERT语句强制执行字符集?
解决方法:
您需要确保使用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命令执行此操作.它将包含有关字符集的信息.
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会担心转换本身是否正确.