我正在尝试在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
答案 0 :(得分:1)
要禁用数据截断引发的错误,请先检查当前配置:
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';
最佳解决方案是在执行查询之前检查字符串的长度,并在超过可能的时间时截断它