-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 に答える