达梦数据库:DMException 字符串截断

96 阅读1分钟

场景描述

我们使用从MySQL数据库迁移过来的,直接用工具迁移数据过来也没报错,当jdbc中执行的时候报

## SQL: MERGE INTO xxx t1   USING (SELECT ? AS id, ? AS start_time, ? AS end_time,             ? AS number, ? AS name, ? AS place_id,             ? AS place_name, ? AS detail, ? AS version             FROM dual) t2             ON (t1.number = t2.number)             WHEN MATCHED THEN             UPDATE SET             t1.name = t2.name,             t1.start_time = t2.start_time,             t1.end_time = t2.end_time,             t1.place_id = t2.place_id,             t1.place_name = t2.place_name,             t1.detail = t2.detail,             t1.version = t2.version             WHEN NOT MATCHED THEN             INSERT (id, start_time, end_time, number, name, place_id, place_name, detail, version)             VALUES (t2.id, t2.start_time, t2.end_time, t2.number, t2.name, t2.place_id,             t2.place_name, t2.detail, t2.version)
### Cause: dm.jdbc.driver.DMException: 字符串截断
; 字符串截断; nested exception is dm.jdbc.driver.DMException: 字符串截断

在网上看了一下,大多数说 是插入的字符串太长,超出了数据库设置的长度,但是迁移过来的数据也很长,但是没有报错,于是我手动在达梦数据库工具中执行插入那个报错的语句,发现是成功的,所以我们猜可能是达梦的JDBC驱动有问题

解决

我到官网上找了一下 ,发现有最新的数据库驱动版本 ,地址: eco.dameng.com/download/

image.png

于是我尝试更新驱动

<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>DmJdbcDriver8</artifactId>
    <version>8.1.3.162</version>
</dependency>

更新后机没有报错了。