为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:达梦版本V8,大小写敏感,字符集UTF-8。
【操作系统】:Windows11,集成SpringBoot
【CPU】:
【问题描述】*:
表中存在列名config,列类型为CLOB
merge into 语句执行。sql语句长度为length: 14,304
config的length: 11,408 可能会更多。。
在自带的DM管理工具可以执行。
通过springboot使用Dm8JdbcDriver18.jar 执行相同sql。
出现如下问题:
; 字符串截断; nested exception is dm.jdbc.driver.DMException: 字符串截断。
可以试试如下解决方案:
1、修改JDBC连接参数
在JDBC连接URL中添加CLOB处理参数:
spring.datasource.url=jdbc:dm://host:port/DATABASE?clobAsString=true&maxAllowedPacket=16777216
参数说明:
clobAsString=true:将CLOB作为字符串处理
maxAllowedPacket=16MB:增大允许的数据包大小
2、检查达梦数据库参数:
-- 查看CLOB相关参数
SELECT * FROM v$parameter WHERE name LIKE '%LOB%';
现在定位到的问题
MERGE INTO d AS t USING ( <foreach collection="dList" item="entity" index="index" separator="UNION ALL"> SELECT #{entity.id} id, #{entity.config} config FROM dual </foreach> ) AS s ON (t.id=s.id) WHEN MATCHED THEN UPDATE SET
如上config列类型为CLOB,length: 11,408可能会更多。。 出现Cause: dm.jdbc.driver.DMException: 字符串截断。