Getting latin-encoded results using JDBC

I am trying to get result sets from a MySQL database using JDBC, which is then used to create reports in BiRT. The connection string is configured in BiRT.

Database - 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 | +--------------------------+----------------------------+ 

So, I am trying to fix the desired coding results that are returned (German characters). I thought that it would make sense for us to use the characterSetResults property to get the result set as "latin1" as follows:

 jdbc:mysql://localhost:3306/statistics?useUnicode=true&characterEncoding=latin1&characterSetResults=latin1 

This connection string fails and after deduction I found that this property:

 characterSetResults=latin1 

causes the connection to fail. A bug is a long Java bug that means little to me. It starts with:

 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) 

If I changed this to:

  characterSetResults=utf8 

the connection string connects without errors, but the encoding problem remains.

Does anyone know the correct way to get latin1? And yes, I know that UTF8 is what I need to use, but it is not my database ....

Thanks for reading this, Stephen

+4
source share
2 answers

After some digging, did you try characterSetResults=ISO8859_1 ? This is equivalent to latin1, and there is evidence that MySQL handles this much better.

I don't have a DB to check this out, but it looks like I read to find what you need.

0
source

When specifying character encodings on the client side, use Java-style names ( Mysql connector-j-reference-charsets ). So this should work using jdbc: mysql: // localhost: 3306 / statistics? useUnicode = true & characterEncoding = utf-8 & characterSetResults = Cp1252

0
source

Source: https://habr.com/ru/post/1346680/


All Articles