当前位置: 首页 > 知识库问答 >
问题:

从Java查询latin1列

魏宏邈
2023-03-14

我想按标题做一个查询,如下所示:

String title = "transfusión";
String sql = "SELECT id FROM graph WHERE title=?";
PreparedStatement st = conn.prepareStatement(sql);
st.setString(1, title);
st.executeQuery();

问题是标题列字符集是latin1,而我的Java文件编码是UTF8。当title变量包含特殊字符(如重音)时,查询永远不会找到结果。

我使用的是MySQL数据库,连接url是:

jdbc:mysql://mysite:3306/mydatabase?autorreconnect=true&characterencoding=latin1&useoldaliasMetadatabeHavior=true

我使用useUnicode=true/false或characterencoding=latin1/utf8/auto尝试了多个选项,但从未得到任何结果。

在prepare语句之前,我还尝试将title和sql转换为ISO-8859-1,如下所示:

title =  new String(title.getBytes("UTF-8"), "ISO-8859-1");
sql =  new String(sql.getBytes("UTF-8"), "ISO-8859-1");

我不能更改数据库的字符集,因为我不是管理员。

我该怎么解决呢?

PD:对不起我的英语。

共有2个答案

沈高峻
2023-03-14

谢谢你@Harlam。你的解决方法不完全正确,但你帮助我找到了正确的方法。我必须将title变量转换为Cp1252,而不是ISO-8859-1,它工作得很好:

title=新字符串(title.GetBytes(“UTF-8”),“CP1252”);

晋功
2023-03-14

参见表5.3 MySQL到Java编码名称的翻译:
http://dev.MySQL.com/doc/connector-j/en/connector-j-reference-charsets.html

jdbc:mysql://mysite:3306/mydatabase?autorreconnect=true&characterencoding=cp1252&useoldaliasmetadatabehavior=true

 类似资料:
  • 问题内容: 我有一个Java程序,可以对sql服务器数据库运行一堆查询。其中第一个查询视图返回大约750k条记录。我可以通过sql server management studio运行查询,大约30秒后即可得到结果。但是,我从昨晚开始运行该程序。当我今天早上检查它时,大约15小时后,该查询仍未将结果返回给Java程序。 我可以访问数据库以执行几乎任何我想做的事情,但是我真的不确定如何开始调试它。人

  • 问题内容: 我想从Go运行WMI查询。有几种方法可以从Go 调用DLL函数。我的理解是,在某个地方必须有一些DLL,通过正确的调用,它将返回一些我可以解析和使用的数据。我宁愿避免调用C或C ++,尤其是因为我猜想它们是Windows API本身的包装。 我检查了的输出,以下条目看起来很有希望: 但是我不确定从这里做什么。此函数采用什么参数?它返回什么?搜索没有帮助。并且该名称仅出现在的注释中,但没

  • 问题内容: 我有一个典型的带有静态参数的交叉表查询。它与createStatement配合良好。我想使用preparestatement来查询。 但这似乎不起作用。 我得到一个PSQLException-无法使用在PreparedStatement上采用查询字符串的查询方法。 有什么想法我想念的吗? 问题答案: 您已经陷入了令人困惑的类型层次结构: 具有与相同的方法,但不应该使用它们,仅使用-–

  • 问题内容: 我想查询LDAP服务器以从中检索所有用户条目。我遇到过一些图书馆 OpenLDAP LDAP SDK Mozilla目录 Apache目录API 我的要求是查询LDAP实施(例如AD Server)中的所有用户,简化编程并在库周围建立良好的社区。我在这里找不到明显的赢家。有人可以告诉我广泛使用的健壮API吗? 问题答案: 与Java一起使用的最佳API是UnboundID LDAP S

  • 本实例使用有关日期处理和日期格式化的类实现一个日期查询的功能,即查询指定日期所在周的周一日期、两个指定日期间相差的天数和指定日期为所在周的星期几的日期 3 个功能。 从功能上来看,本实例至少需要定义 3 个方法,分别完成:获取指定日期所在周的周一日期、获取两个指定日期的相差天数以及获取指定日期为所在周的星期几的日期这 3 个功能,同时需要定义 Date 类型的日期与 String 类型之间的转换方

  • 问题内容: 我有一个关于JDBC的Java中方法的简单查询。 假设“数据库”列中的值具有一个java换码字符,例如或等。 当我检索到该值时,看到又添加了一个换码字符,并且此字符的实际含义现在仅是字符串文字。 因此,我不得不取消对Java的转义,然后正确使用它。 当包含`\ n’时: 输出: 使用apache common 输出对Java进行转义后: 我的问题是,谁在脱逃前添加了这笔额外费用?抱歉,