当前使用版本(必填,否则不予处理)

3.5.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

使用3.5.3测试依旧有问题,需要将时间或日期字段设置null

重现步骤(如果有就写完整)

1、数据库使用Sql Server 2022 2、随便创建一张表,设置一个日期字段,类型为date,一个时间字段,类型为datetime,一个类型为datetime2 3、@TableField(updateStrategy = FieldStrategy.IGNORED)设置允许为null 4、updateById方法修改

报错信息

1、 MyBatis-Plus sql server 设置datetime2和date类型数据为null,提示不允许从数据类型 varbinary 到 date/datetime2 的隐式转换 2、 MyBatis-Plus sql server 设置datetime2和date类型数据为null,提示不允许从数据类型 varbinary 到 date/datetime2 的隐式转换 3、 MyBatis-Plus sql server 设置datetime2和date类型数据为null,提示不允许从数据类型 varbinary 到 date/datetime2 的隐式转换

Comment From: miemieYaho

你要看你执行的sql是什么

Comment From: IvesQing

执行update语句:UPDATE resource_order SET order_no='20230322002', order_type=10, order_quantity=12, corr_type='BC', length=712, width=262, height=139, bord_len=121, bord_width=377, process_status='70', finish_time=null, has_file=10, has_ai=10, order_date='2023-03-23', box_type_name='普通箱', custom_order_no='三方平台同步-769', custom_name='模拟第三方', part_no='', part_name='临时物料', part_spec='712262*139', print_layout_type='10', remark=NULL, org_id=1000, rec_ver=2, creator=-1, create_name='自动生成', create_time='2023-03-22T12:03:35', modifier=NULL, modify_name=NULL, modify_time='2023-03-22T14:29:27' WHERE id=1 AND rec_ver=1 AND rec_status=0;

就是把finish_time设置为nul。 MyBatis-Plus sql server 设置datetime2和date类型数据为null,提示不允许从数据类型 varbinary 到 date/datetime2 的隐式转换

Comment From: uniquejava

类似的问题, 对 datetime2 的支持不好..

版本: SQL Server 2022

如果在 SQL Server 中我的 updatedDate 字段设置为 datetime2 类型, java 这边如果使用了 FieldFill

Entity 类 如下:

/**
 * 更新时间
 */
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updatedAt;

MetaObjectHandler.java 如下

this.strictUpdateFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now());

则会报错:

Implicit conversion from data type varbinary to datetime2 is not allowed.

Comment From: miemieYaho

类似的问题, 对 datetime2 的支持不好..

版本: SQL Server 2022

如果在 SQL Server 中我的 updatedDate 字段设置为 datetime2 类型, java 这边如果使用了 FieldFill

Entity 类 如下:

java /** * 更新时间 */ @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updatedAt;

MetaObjectHandler.java 如下

java this.strictUpdateFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now());

则会报错:

Implicit conversion from data type varbinary to datetime2 is not allowed.

你这是驱动问题,和自动填充没关系