You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

H2数据库升级后提示‘SYSDATE’列不存在问题求助

解决方案
  • 调整H2 JDBC URL参数
    在现有连接URL里加上SYSDATE_AS_FUNCTION=FALSE,让H2在Oracle兼容模式下接受无括号的SYSDATE作为默认值:

    jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=Oracle;SYSDATE_AS_FUNCTION=FALSE
    

    这个参数会让H2把SYSDATE当成Oracle风格的内置变量,不用强制加括号调用。

  • 用Liquibase数据库条件适配
    不想改URL的话,直接在Liquibase脚本里针对不同数据库设置对应默认值,Oracle保留SYSDATE,H2用带括号的SYSDATE():

    <column name="CREATION_DATE" type="TIMESTAMP(6)">
        <defaultValueComputed dbms="oracle">SYSDATE</defaultValueComputed>
        <defaultValueComputed dbms="h2">SYSDATE()</defaultValueComputed>
    </column>
    
  • 改用通用兼容的默认值
    如果想让脚本更通用,换成CURRENT_TIMESTAMP就行——Oracle 11g及以上版本和H2都原生支持这个函数,不用区分数据库:

    <column name="CREATION_DATE" type="TIMESTAMP(6)">
        <defaultValueComputed>CURRENT_TIMESTAMP</defaultValueComputed>
    </column>
    

内容的提问来源于stack exchange,提问作者phildeg31

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:25:26