2012-03-07 45 views
4

所以我想输入博客评论到数据库的NLP实验,但我有一些问题:我在插入使用准备语句,但所有单引号都变成问号。与MySQL的JDBC连接器转义的问题

我在OS X上测试,不知道字符编码:我认为它是默认的isn_swedish等,但经过几个小时的分散谷歌搜索,我一直无法弄清楚如何确定它。我提交类似“我并没有说”作为一个参数去

PreparedStatement statement = connect.prepareStatement("INSERT IGNORE INTO bwog.article (article_id, date, title, content, url) VALUES (?, ?, ?, ?, ?)"); 
... 
... 
String s = "I didn't say that"; //not literal string, but printlns like this 
statment.setString(4, s); 

而且它变成“我不?吨说,”在执行和所有数据库之后。

我认为这是某种假设问题,我不知道或忘记履行某些先决条件。

解决方案:这是字符编码。数据库和表格使用UTF-8,但所有“character_set%”变量的命令行连接都是latin1,所以即使数据很好,它也会出现乱码。

+0

你系统上的'Charset.defaultCharset'的结果是什么。数据库表的字符编码是什么? – Perception 2012-03-07 05:19:33

+0

这绝对是一个字符编码问题。问题在于数据库驱动程序不支持它在数据库或模式中,或者在代码中使用2个不同的字符集。 http://stackoverflow.com/questions/4724299/java-preparedstatement-setstring-changes-characters看看这个链接是否对你有帮助。 – 2012-03-07 06:55:19

+2

你应该提供你发现这个问题的答案,并'接受'它。 – 2012-05-15 01:53:20

回答

0

为了从“未答复”过滤器删除此...

预测:你的问题是字符编码。我敢打赌,你的数据库和表格都是UTF-8,但是你的命令行连接对于所有的“character_set%”变量都是latin1,所以即使数据很好,它也会出现乱码。