我正在尝试从MySQL数据库中检索结果集,然后使用JDBC在BiRT中生成报告。连接字符串在BiRT中设置。
数据库是latin1:
SHOW VARIABLES LIKE 'c%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
| completion_type | 0 |
| concurrent_insert | 1 |
| connect_timeout | 5 |
+--------------------------+----------------------------+
所以我一直在尝试纠正返回的奇怪的编码结果(德语字符)。我认为将“characterSetResults”属性检索到结果集为“latin1”是有意义的,如下所示:
jdbc:mysql://localhost:3306/statistics?useUnicode=true&characterEncoding=latin1&characterSetResults=latin1
此连接字符串失败,通过演绎,我发现它是属性:
characterSetResults=latin1
导致连接失败。该错误是一个长java错误,这对我来说意义不大。它始于:
org.eclipse.birt.report.data.oda.jdbc.JDBCException: There is an error in get connection, Communications link failure
Last packet sent to the server was 38 ms ago..
at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.doConnect(JDBCDriverManager.java:262)
at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.getConnection(JDBCDriverManager.java:186)
at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.tryCreateConnection(JDBCDriverManager.java:706)
at org.eclipse.birt.report.data.oda.jdbc.JDBCDriverManager.testConnection(JDBCDriverManager.java:634)
at org.eclipse.birt.report.data.oda.jdbc.ui.util.DriverLoader.testConnection(DriverLoader.java:120)
at org.eclipse.birt.report.data.oda.jdbc.ui.util.DriverLoader.testConnection(DriverLoader.java:133)
at org.eclipse.birt.report.data.oda.jdbc.ui.profile.JDBCSelectionPageHelper.testConnection(JDBCSelectionPageHelper.java:687)
at org.eclipse.birt.report.data.oda.jdbc.ui.profile.JDBCSelectionPageHelper.access$7(JDBCSelectionPageHelper.java:655)
at org.eclipse.birt.report.data.oda.jdbc.ui.profile.JDBCSelectionPageHelper$7.widgetSelected(JDBCSelectionPageHelper.java:578)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
如果我将其更改为:
characterSetResults=utf8
连接字符串连接没有错误,但编码问题仍然存在。
有谁知道检索latin1的正确方法?是的,我知道UTF8是可以使用的东西,但这不是我的数据库......
感谢您阅读本文, 斯蒂芬
答案 0 :(得分:0)
经过一番挖掘,你试过characterSetResults=ISO8859_1
吗?这相当于latin1,有证据表明MySQL处理得更好。
我没有数据库来测试这个,但它看起来就像我读到的那样,是你所需要的。
答案 1 :(得分:0)
在客户端指定字符编码时,使用Java风格的名称(Mysql connector-j-reference-charsets)。所以应该使用jdbc:mysql:// localhost:3306 / statistics?useUnicode = true& characterEncoding = UTF-8和; characterSetResults =的Cp1252