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

Oracle 12.1中Liquibase建表报ORA-00972错误排查求助

ORA-00972: identifier is too long 异常原因分析(Liquibase + Oracle 12c R1)

这个异常的核心原因不是主键列的UUID值长度问题,而是Liquibase自动生成的主键约束名称超过了Oracle 12.1版本对标识符(约束名、表名、列名等)30字符的长度限制。

具体细节:

  • 手动建表时,要么是你自己显式指定了短于30字符的主键约束名,要么是Oracle自动生成了SYS_C00xxxxxx这类符合长度要求的系统默认约束名,所以不会触发报错。
  • Liquibase默认会根据表名、列名拼接生成主键约束名,比如格式为PK_<表名>_<列名>。如果你的表名或列名较长,拼接后的约束名很容易突破30字符限制——比如表名是USER_BUSINESS_DETAILS、主键列是USER_UUID,生成的PK_USER_BUSINESS_DETAILS_USER_UUID长度远超30,直接触发ORA-00972。

你可以通过liquibase updateSQL命令导出Liquibase实际执行的SQL语句,检查其中的主键约束名称长度,就能验证这个问题。

解决起来也简单:在Liquibase的changeSet里显式指定短于30字符的主键约束名即可,示例如下:

<changeSet id="create_user_table" author="your_name">
    <createTable tableName="USER_BUSINESS_DETAILS">
        <column name="USER_UUID" type="VARCHAR2(36)">
            <constraints primaryKey="true" primaryKeyName="PK_USER_UUID"/>
        </column>
    </createTable>
</changeSet>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:19:58