-1

我正在尝试在 jaspersoft 服务器上配置 jaspersoft 报告。我创建了一个报告,该报告执行一个传递多个值的存储过程。

当我尝试运行将长字符串作为输入参数传递的报告时,服务器显示以下错误:

com.jaspersoft.jasperserver.api.JSException: Error filling report
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'canales'
at row 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3607)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127) 
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293) 
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92) 
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:239) 
... 15 more
4

1 回答 1

3

要禁用数据截断引发的错误,请首先检查您的当前配置:

SHOW VARIABLES LIKE 'sql_mode'

你可能有这样的事情:

STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
STRICT_ALL_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

所以只需通过执行删除 STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES (取决于存储引擎)

SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

最好的解决方案是在执行查询之前检查字符串的长度,如果超过可能的长度则截断它

于 2012-11-28T21:15:48.043 回答