Oracle SQL无符号整数

Vel*_*tov 3 sql oracle11g

在Oracle中,什么相当于MySQL的UNSIGNED?

我有以下查询,只是它不起作用:

CREATE TABLE foo
(
  id INT UNSIGNED NOT NULL PRIMARY KEY
);
Run Code Online (Sandbox Code Playgroud)

编辑:我的目的是节省空间,因为对于某些字段,我不会使用负值.或者,它会回答我的问题,即有人确认我要求的东西在Oracle 11g中是不可能的,或者是否可能,但不是直截了当(每个unsigned int超过3行代码).

此外,它不一定是关于int.我也使用smallint和tinyint.

Ale*_*ole 8

如果要匹配此处显示的限制,可以使用检查约束:

SQL> create table foo (id number primary key, 
    constraint foo_uint_id check (id between 0 and 4294967295));

Table created.

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

insert into foo (id) values (-1)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.FOO_UINT) violated

SQL> insert into foo (id) values (0);

1 row created.

SQL> insert into foo (id) values (4294967295);

1 row created.

SQL> insert into foo (id) values (4294967296);

insert into foo (id) values (4294967296)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.FOO_UINT_ID) violated

SQL> select * from foo;

        ID
----------
         0
4294967295
Run Code Online (Sandbox Code Playgroud)

  • 数字存储可能无法按预期工作; 见[此AskTom文章](http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 使用较少的空间可能不是一个有用的目标? (3认同)
  • 我也想占用更少的空间。或者,如果有人确认我的任务不能以简单的方式完成,我会感到满意。 (2认同)