BIRT报表使用MySQL json_unquote返回HEX数值显示异常问题
问题描述
使用Eclipse BIRT制作报表对接MySQL数据库时,尝试通过json_unquote函数处理JSON格式字段并展示查询结果,报表界面输出内容全部为HEX十六进制数值,无法得到预期的正常文本。
参考素材
- 环境对比结果:MySQL Workbench中执行相同查询可得到正常结果,Eclipse BIRT环境下执行查询则输出异常HEX内容
- 测试表
action_data1建表脚本:
CREATE TABLE `action_data1` ( `id_ref` bigint NOT NULL, `data_map` text, PRIMARY KEY (`id_ref`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 附可复现问题的Rptdesign报表设计文件
问题根因
json_unquote()函数返回值属于JSON类型,旧版本MySQL JDBC驱动(5.1.x早期版本)会将其识别为BINARY/BLOB类型返回给客户端,而非常规字符串类型- BIRT接收到BLOB类型字段时,默认会将其转换为HEX十六进制字符串展示,因此出现异常输出
- MySQL Workbench使用内置驱动可正确解析JSON类型返回值,因此同SQL在Workbench中执行结果正常
解决方案
方案1:SQL层强制类型转换(最快生效)
在查询语句中对json_unquote()的返回值强制转为字符串类型:
SELECT CAST(JSON_UNQUOTE(data_map) AS CHAR) AS unquoted_content FROM action_data1;
驱动会直接返回字符串类型,不会被识别为BLOB,BIRT可正常展示文本内容。
方案2:修改BIRT数据集字段配置
- 打开对应数据集的**字段(Fields)**配置页面
- 找到
json_unquote()对应的输出字段,将默认的BLOB类型手动修改为String类型 - 重新预览报表即可得到正常文本结果
方案3:升级MySQL JDBC驱动
- 将BIRT使用的
mysql-connector-java驱动从旧版5.1.x升级到5.1.49及以上版本,或根据MySQL版本适配升级到8.0.x版本 - 如果BIRT使用的是内置旧版驱动,可直接替换新版驱动jar包到BIRT的类路径(通常位于
plugins/org.eclipse.birt.report.data.oda.jdbc_xxx/drivers/目录)下 - 升级后驱动可正确识别JSON类型返回值为字符串,无需修改SQL或BIRT配置
- 注意确认JDBC连接URL已添加
useUnicode=true&characterEncoding=utf8参数,避免字符编码异常
内容的提问来源于stack exchange,提问作者user3309305
相关产品推荐
相关产品推荐

