我制作了一些 JasperReports,并且在 Windows 机器上运行良好。当报告设置为在具有 zOS 操作系统的大型机上运行时,问题就开始了。
问题是:当 Jasper 创建报告时,它似乎从数据库中读取表元数据,并基于它期望数据到来。
示例:如果我有一列类型为 varchar(20),那么即使报告字段定义为字符串,Jasper 也只会等待 20 个字符。
这在 Windows 环境中不会发生,但在大型机上,字符编码是 EBCDIC,因此该列在大型机上可能有 19 个字符,但在编码时它以 23 或 24 个字符返回到报告中。
注意:此问题仅出现在非英文字符中。
Jasper 创建报告时抛出UPDATE
A ConversionBufferFull
,我没有完整的跟踪,因为我无法访问大型机日志。当值约为 17-20 个字符时,只有一个名为 COUNTRY_DESC 的列会出现问题,会发生异常。
正如我提到的,大型机上的字符集是 EBCDIC,但是当它通过 JDBC 读取时,它会转换为 Unicode。例如,在 EBCDIC 中,单词将是 17 个字符,但在转换后变为 22。出于某种奇怪的原因,Jasper 仅希望该字段为 20。