写点什么

YashanDB 知识库|Oracle 里的大整数插入正常,换到崖山却报错? 问题可能出在字段类型上

作者:数据库砖家
  • 2025-05-09
    广东
  • 本文字数:589 字

    阅读完需:约 2 分钟

【问题现象】

在将一张 Oracle 表迁移至 YashanDB 后,执行插入操作时报如下错误:

SQL 错误 [13] [22000]: [line: 0 column: 0] YAS-00013 value is larger than INTEGER allowed
复制代码

而在 Oracle 中相同语句执行无误。为什么?


【根本原因】

这其实是 字段类型默认映射差异 所致。

1. INT 类型的最大值有限

YashanDB 遵循标准 SQL 类型规范:

INT 类型的取值范围为:-2,147,483,648 ~ 2,147,483,647
复制代码

而报错中的数值是 16 位长整型,显然超出了 INT 类型的表示范围。

2. Oracle 的 INT ≠ 标准 INT

虽然 Oracle 中也支持 INT 写法,但实际上它会自动映射为 NUMBER 类型,精度更高,因此在 Oracle 中可以插入更大的整数。

例如:

-- 实际上这在 Oracle 中是等价于:CREATE TABLE t_test (id NUMBER);
复制代码

【解决方法】

修改字段类型为 BIGINT 或 NUMBER

为了兼容大整数建议统一使用以下字段定义:

-- 推荐写法CREATE TABLE t_test (  id NUMBER  -- 或者使用 BIGINT);
复制代码

避免使用 INT 类型,尤其是在可能接收超过 10 位整数的场景中。

【迁移建议】

在从 Oracle 向 YashanDB 迁移时:

建议在迁移前,使用工具或脚本自动识别并调整超范围字段,避免插入报错。

【影响版本】

适用于 YashanDB 所有版本

【总结】

YashanDB 中 INT 是严格 32 位整数;

Oracle 的 INT 实际上通常是 NUMBER,支持大整数;

避免直接照搬字段类型,迁移时应注意数据精度范围;

建议统一使用 NUMBER 类型接收未知位数的整型字段。

用户头像

还未添加个人签名 2025-04-09 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB 知识库|Oracle 里的大整数插入正常,换到崖山却报错?问题可能出在字段类型上_数据库_数据库砖家_InfoQ写作社区