写点什么

YashanDB|大整数插入报错 YAS-00013? 可能是数据类型没对上

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

    阅读完需:约 2 分钟

【问题描述】

在将 Oracle 表结构迁移到 YashanDB 并执行插入操作时,遇到以下报错:

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

同样的数据在 Oracle 中插入无误,在 YashanDB 中却无法通过。这是为什么?


【问题分析】

数据类型差异是根本原因

在 Oracle 中,INT 实际上并不是标准数据类型,而是很多开发工具对 NUMBER 类型的映射结果;

NUMBER 在 Oracle 中可以容纳非常大的整数,而 INT 在 YashanDB 中是严格遵守 ANSI SQL 标准的整数类型。

标准 INT 范围有限

在 YashanDB 中:

INT 范围为:-2.147.483.648 到 2.147.483.647(32 位)
复制代码



如果你插入的数据是 16 位数字,如:

9999999999999999
复制代码

它远远超出了 INT 的表示范围,自然触发溢出报错。

【受影响版本】

YashanDB 所有版本

【解决办法】

修改字段类型

请将字段类型从 INT 修改为:

BIGINT(支持最大 64 位整型)

或 NUMBER(更通用的数值类型,兼容 Oracle 行为)

示例:

-- 推荐使用CREATE TABLE example (  id NUMBER);CREATE TABLE example (  id BIGINT);
复制代码

建议在迁移工具中设置类型映射规则:

确保 Oracle 的 NUMBER 类型不要被误映射为 INT。

【小结建议】

Oracle 的 INT ≠ YashanDB 的 INT,迁移需特别留意;

对于 ID、流水号等大数字字段,统一推荐使用 NUMBER 或 BIGINT;

可结合 YMP 或工具脚本增加字段类型兼容性检查逻辑,避免批量迁移后插入失败。

用户头像

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

还未添加个人简介

评论

发布
暂无评论
YashanDB|大整数插入报错 YAS-00013?可能是数据类型没对上_数据库_数据库砖家_InfoQ写作社区