Oracle 11g:我可以创建一个仅存储 1 个字节的数字列吗?

发布于 2025-01-06 21:01:18 字数 75 浏览 2 评论 0原文

我需要一个数字列来作为我正在处理的内容的指示器,但我不希望它占用每个记录超过一个字节。如果我使用NUMBER(1),这能满足我的要求吗?

I need a number column to serve as an indicator for something I am working on, but I don't want it to take up more than a single byte per record. If I use NUMBER(1), would this satisfy my requirement?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

诠释孤独 2025-01-13 21:01:18

NUMBER(1) 列将占用存储 1 位数字所需的空间。这可能超过 1 个字节(负数需要 3 个字节,0 需要 1 个字节,数字 1-9 需要 2 个字节)

SQL> create table foo( col1 number(1) );

Table created.

SQL> insert into foo values( 1 );

1 row created.

SQL> insert into foo values( 9 );

1 row created.

SQL> insert into foo values( -7 );

1 row created.

SQL> select vsize(col1), col1 from foo;

VSIZE(COL1)       COL1
----------- ----------
          2          1
          2          9
          3         -7

带有 VARCHAR2(1 BYTE) 列的表,另一方面,每行存储最多使用 1 个字节

SQL> create table bar( col1 varchar2(1) );

Table created.

SQL> insert into bar values( 'Y' );

1 row created.

SQL> insert into bar values( 'N' );

1 row created.

SQL> select vsize(col1), col1 from bar;

VSIZE(COL1) C
----------- -
          1 Y
          1 N

A NUMBER(1) column will take up however much space it requires to store a 1 digit number. That is likely to be more than 1 byte (negative numbers will require 3 bytes, a 0 requires 1 byte, the numbers 1-9 require 2 bytes)

SQL> create table foo( col1 number(1) );

Table created.

SQL> insert into foo values( 1 );

1 row created.

SQL> insert into foo values( 9 );

1 row created.

SQL> insert into foo values( -7 );

1 row created.

SQL> select vsize(col1), col1 from foo;

VSIZE(COL1)       COL1
----------- ----------
          2          1
          2          9
          3         -7

A table with a VARCHAR2(1 BYTE) column, on the other hand, will use at most 1 byte per row of storage

SQL> create table bar( col1 varchar2(1) );

Table created.

SQL> insert into bar values( 'Y' );

1 row created.

SQL> insert into bar values( 'N' );

1 row created.

SQL> select vsize(col1), col1 from bar;

VSIZE(COL1) C
----------- -
          1 Y
          1 N
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文