5

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

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

CREATE TABLE foo
(
  id INT UNSIGNED NOT NULL PRIMARY KEY
);

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

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

4

2 回答 2

7

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

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
于 2013-05-02T14:31:41.527 回答
2

这里http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements001.htm#i54330是 Oracle 内置数据类型的最终列表。

如果您想要整数的语义,那么number(n)基本上是您唯一的选择。我个人使用integerwhich 是一种稍微短一点的说法number(38)

于 2013-05-02T14:59:37.853 回答