为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:
【CPU】:
【问题描述】*:使用CONCAT函数update字段报错‘字符串截断’
执行语句: UPDATE PLAY_JOB_INSTANCE SET
log = CONCAT(log, '2024-06-24T18:03:28.923643201+08:00 - 模板生成采控材料节点【linux-os-mat-get】。存在执行失败的循环2024-06-24T18:03:28.922481765+08:00 - 模板生成采控材料节点【linux-os-mat-get】。存在执行失败的循环
') WHERE id= 455249344927211520;
log字段类型:text
报错如下:
org.jkiss.dbeaver.model.sql.DBSQLException: SQL 错误 [22001]: 字符串截断
at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:133)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeStatement(SQLQueryJob.java:614)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.lambda$2(SQLQueryJob.java:505)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeSingleQuery(SQLQueryJob.java:527)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.extractData(SQLQueryJob.java:976)
at org.jkiss.dbeaver.ui.editors.sql.SQLEditor$QueryResultsContainer.readData(SQLEditor.java:4155)
at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:123)
at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:194)
at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:121)
at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5152)
at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:115)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: dm.jdbc.driver.DMException: 字符串截断
at dm.jdbc.driver.DBError.throwException(SourceFile:711)
at dm.jdbc.a.a.x.i(SourceFile:615)
at dm.jdbc.a.a.f.i(SourceFile:137)
at dm.jdbc.a.a.x.q(SourceFile:550)
at dm.jdbc.a.a.x.x(SourceFile:531)
at dm.jdbc.a.a.a(SourceFile:271)
at dm.jdbc.a.a.a(SourceFile:762)
at dm.jdbc.driver.DmdbStatement.executeInner(SourceFile:730)
at dm.jdbc.driver.DmdbStatement.do_execute(SourceFile:189)
at dm.jdbc.driver.DmdbStatement.do_execute(SourceFile:181)
at dm.jdbc.driver.DmdbStatement.execute(SourceFile:1300)
at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.execute(JDBCStatementImpl.java:330)
at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:131)
... 11 more
但是执行
UPDATE PLAY_JOB_INSTANCE SET
log = '这里是从数据表字段取出字符串很长。。。' where id=xxxx
log内的字符串一样就可以执行成功,用concat函数就失败
UPDATE PLAY_JOB_INSTANCE SET log = (log||'新增的数据') WHERE id= 455249344927211520;
这样试试呢 || 是拼接的意思
在dm.ini 有个参数 WM_CONCAT_LOB
指定 WM_CONCAT 函数的返回值类型。0:VARCHAR 类型;1:CLOB 类型
估计等于0了。这样VARCHAR 长度有限制了

数据库用的什么版本?建库参数簇大小和页大小设置是否是32K?

我本地测试语句执行没有异常,可以的话打包一个demo出来。