You need to enable JavaScript to run this app. BIRT报表使用MySQL json_unquote返回HEX数值显示异常问题
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 11:27:02