2011-04-05 63 views
4

我想從MySQL數據庫檢索結果集,然後用JDBC在BiRT中生成報告。連接字符串在BiRT中設置。使用JDBC檢索latin1編碼結果

數據庫是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

我有同樣的問題。你解決它? – 2011-12-23 06:22:25

+0

同樣的問題在這裏 – FooBar 2013-10-03 13:26:02

回答

0

一些挖後,你嘗試過characterSetResults=ISO8859_1?這相當於latin1,並且有證據表明MySQL處理得更好。

我沒有一個數據庫來測試這個,但它看起來形成了我所讀到的所需內容。

+0

恐怕沒有用。我認爲唯一的辦法是將數據庫轉換爲使用UTF8,然後再將其轉儲到數據庫中,該數據庫的UTF8編碼在「CREATE DATABASE」子句中定義。 – LostInTheWoods 2011-04-07 10:17:36

0

當指定在客戶端的字符編碼,使用Java風格的名稱(Mysql connector-j-reference-charsets)。所以,它應該通過使用JDBC如何工作:mysql://本地主機:3306 /統計了useUnicode =真&的characterEncoding = UTF- 8 & characterSetResults = Cp1252