MysqlDataTruncation:数据截断:列的数据太长

时间:2012-11-28 21:03:30

标签: mysql jasper-reports jasperserver

我正在尝试在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

1 个答案:

答案 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';

最佳解决方案是在执行查询之前检查字符串的长度,并在超过可能的时间时截断它