场景描述
我们使用从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/
于是我尝试更新驱动
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver8</artifactId>
<version>8.1.3.162</version>
</dependency>
更新后机没有报错了。