从CSV用Java mySQL插入特定的字符集

我有一个小问题,我正在使用连接到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会担心转换本身是否正确.

相关文章

连接数据库的方式:第一种方式:ODBC:开放数据库连接是微软...
JDBCRequest 使用VariableNamesmysql:数据库连接池对象var...
 1.JDBCDBC(JavaDataBaseConnectivity):Java数据库连接技术...
1.需要jar包的支持:java.sqljavax.sqlmysql-conneter-java....
1.简介Activiti是一个业务流程管理(BPM)框架,它是覆盖了业务...
1.JDBC体系系统一组规范:接口JDBC接口(API)包括两个层次:...