Microsoft SQL Server JDBC 的连接字符串 useBulkCopyForBatchInsert=true 导致SQL Server 部分字段未insert

问题前提:

  DB数据库连接字符串中包含 useBulkCopyForBatchInsert=true

背景:

某一个测试环境(一段时间未更新程序,长期来看功能一直正常的测试环境)忽然出现异常,接口正常调用,但实际在DB校验数据,发现只insert了部分字段到数据库,部分字段为null(未insert到数据库)。

代码逻辑:批量insert(Mybatis Plus的insert接口)

日志打印十分正常,包含打印的Preparing SQL 以及实际insert的返回内容都符合正常逻辑。

看起来十分的玄幻,然而抽丝剥茧,发现根本原因,是之前压测时,因为请求耗时不稳定,尝试调整连接字符串进行优化请求耗时。

然后就放在那里,没有进行后续调整了。

直到这张表的表结构发生了改变,字段物理列顺序发生变化

 

为什么日志是正常的?

因为useBulkCopyForBatchInsert控制的是 PreparedStatement.executeBatch() 的底层实现方式

原本目的是优化单表批量insert性能

发现了这个问题,移除连接字符串后,测试环境恢复正常

PS:useBulkCopyForBatchInsert会按照物理列顺序执行批量insert

posted @ 2026-06-15 15:47  人间春风意  阅读(3)  评论(0)    收藏  举报