无法使用 liquibase 和 h2 数据库最新版本从 CSV 文件插入 NULL 值

Not able to insert NULL values from CSV file with liquibase and h2 database latest version

我有一个外部 csv 文件,其中包含要插入的数据。我的专栏之一是数据类型时间戳(但它是一个可为空的列)。具有数据值 NULL/null 以下面的异常结束。

Caused by: liquibase.exception.DatabaseException: 
org.h2.jdbc.JdbcBatchUpdateException: Cannot parse "TIMESTAMP" constant ; SQL statement:

我调试以查看生成的插入语句,当我进入 JdbcPreparedStatement class 时,CommandInterface 似乎具有空的“”字符串值而不是 NULL。

编辑:不小心,我试图在我的 liquibase 脚本中设置列的数据类型(可以为 NULL)并解决了这个问题。

在我的更新日志中明确添加了这些带有数据类型的列标签,这解决了问题。似乎是 liquibase 问题而不是 H2 DB。

<loadData tableName="Order" file="test_data/Order.csv">
  <column name="CreatedAt" type="TIMESTAMP"/>
  <column name="UpdatedAt" type="TIMESTAMP"/>
  <column name="OrderAt" type="TIMESTAMP"/>
  <column name="BusinessDate" type="DATE"/>
  <column name="ClaimedAt" type="TIMESTAMP"/>
  <column name="SnapshotID" type="STRING"/>
</loadData>

注意:我的 table 确实有更多列。这些是可以接受空值的列。

我花了整整 2 天时间才找到这个。正如您所看到的,是 H2 DB 异常。 Liquibase 似乎默认为空字符串,即使 csv 具有空值,除非您指定具有其数据类型的列。

我使用的是 liquibase 版本 3.5.5,在我的 csv 中使用 'NULL' 对我有用

示例 liquibase 文件:

id,field1,field2,field3
11,NULL,NULL,test

将导致 NULL 值分别插入到 field1 和 field2 中。