Oracle 数据库无符号整数

Posted

技术标签:

【中文标题】Oracle 数据库无符号整数【英文标题】:Oracle Database unsigned integer 【发布时间】:2020-05-25 21:31:45 【问题描述】:

我也想知道,如果 Oracle 数据库支持 unsigned int(number) 我如何使用它,或者如果不支持,还有什么替代方法? 我不需要为 SQL 语法设置条件,因为我的所有数据都是正数,而且 unsigned int 对性能和存储很重要。

【问题讨论】:

【参考方案1】:

Oracle 中没有 无符号整数 作为本机数据类型。有NUMBER 数据类型。但是,您可以使用INT,例如

SQL> create table test (id int);

Table created.

SQL> insert into test (id) values (-1);

1 row created.

SQL> insert into test (id) values (25.335);

1 row created.

SQL> select * From test;

        ID
----------
        -1
        25

SQL>

如您所见,它接受正值和负值(小数被截断)。

为了使其为正,添加一个约束:

SQL> truncate table test;

Table truncated.

SQL> alter table test add constraint ch_id_pos check (id >= 0);

Table altered.

SQL> insert into test (id) values (-1);
insert into test (id) values (-1)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CH_ID_POS) violated


SQL>

【讨论】:

【参考方案2】:

我认为 Oracle 没有为无符号整数提供特定的数据类型。它提供了一种数据类型来存储固定的数值,称为NUMBER,可以根据需要调整其精度和小数位数。

在 Oracle 中,所谓的 INT 数据类型是为 ANSI 兼容性提供的语法糖,它在内部映射到 NUMBER

我会推荐一个带有0 刻度的数字(这是一个整数),以及一个检查约束以确保它是正数:

create table mytable (
    id number(20, 0) check (id >= 0)
);

【讨论】:

以上是关于Oracle 数据库无符号整数的主要内容,如果未能解决你的问题,请参考以下文章

Mysql数据类型

SQL——数据类型

QImage 格式 Format_ARGB32 数据是有符号还是无符号整数?

mysql的基本数据类型

如何在 SQLAlchemy 中定义无符号整数

将无符号整数存储在指针中