如果数据源的字符集配置错误,前端的错误现象是:报表中所有从数据库中取出的中文乱码。解决办法:
将report_config.xml中dataSource对应的值中第4个选项由GBK改为ISO-8859-1或由ISO-8859-1改为GBK即可,如下所示:
<dataSource> <JNDIPrefix>java:comp/env/</JNDIPrefix> <JNDIName>BIOS_DS</JNDIName> <DBType>BIOS_DS</DBType> <DBEncode>GBK</DBEncode> <SQLDecode>false</SQLDecode> <Default>true</Default> </dataSource>
有些数据库的字符集不是gbk,因此相应的jdbc包可能会对sql进行处理,例如sqlsvr,如果你传递一个正确的含中文的sql给它,那么其jdbc包会把sql语句转成数据库能识别的字符,如iso-8859-1,然后再交给数据库去执行,获得查询结果后,jdbc又会把查询结果转成GBK返回给客户端。
因此,存在一个问题:有些JDBC包对SQL语句进行了转码,例如SQL SERVER,但是有些JDBC包没有对SQL语句进行处理,例如DB2,此时就需要用户自己把SQL语句转为数据库可识别的字符集。这就是SQL是否需要转码配置的由来。
验证SQL是否需要转码,最简单的办法是写一个带中文的SQL语句,用JDBC的连接方式提交给数据库执行,看能否返回正确的执行结果,如果不行,说明需要转码。 解决办法:
将report_config.xml中dataSource对应的值中第5个选项改为true即可
<dataSource> <JNDIPrefix>java:comp/env/</JNDIPrefix> <JNDIName>BIOS_DS</JNDIName> <DBType>BIOS_DS</DBType> <DBEncode>GBK</DBEncode> <SQLDecode>false</SQLDecode> <Default>true</Default> </dataSource>
由于GBase8a仅仅支持2VCC,不支持MVCC,导致不支持批量更新、删除以及其它一些组合事务,因此需要将report_config.xml中dataSource对应的值中第6个选项改为fase即可。
<dataSource> <JNDIPrefix>java:comp/env/</JNDIPrefix> <JNDIName>BIOS_DS</JNDIName> <DBType>BIOS_DS</DBType> <DBEncode>GBK</DBEncode> <SQLDecode>false</SQLDecode> <Default>true</Default> <SupportMVCC>false</SupportMVCC> </dataSource>