用二进制表示 NULL
Representing NULL in binary
In PL/SQL DATE
数据类型存储固定长度的值。它们以二进制格式存储,但以默认格式显示为字符。
考虑以下声明:
v_regdate DATE;
这里v_regdate
没有初始化,因此它的值为NULL。只是想知道 NULL 如何以二进制格式存储。
如果给定日期(实际上是任何数据类型)变量/列的值为空,则不会存储任何内容。 Null 只是 shorthand 什么都没有,nada,zip(至少就存储的数据而言)。
从这个测试用例可以看出:
create table test (col1 number, col2 date);
insert into test (col1) values (1);
insert into test (col1, col2) values (2, sysdate);
commit;
select col1,
to_char(col2, 'dd/mm/yyyy hh:mi:ss') col2,
dump(col1) col1_dump,
dump(col2) col2_dump
from test;
COL1 COL2 COL1_DUMP COL2_DUMP
---------- ------------------- -------------------- ----------------------------------------
1 Typ=2 Len=2: 193,2 NULL
2 28/01/2015 11:12:33 Typ=2 Len=2: 193,3 Typ=12 Len=7: 120,115,1,28,12,13,34
drop table test;
注意 col2 的转储报告的 "NULL" 空值;这意味着 "there is nothing stored in this column for this row".
In PL/SQL DATE datatype stores fixed length values ...
这不太正确。一个日期有一个使用七个字节的内部表示,是的,所有实际日期的长度都是七个字节,如果你想这样看的话。你可以在@boneist 的回答中的 dump()
中看到,所以我不会重复它。
但是 null 值不会将这七个字节全部设置为某个值 - 如果您正在寻找它,它就不是一个神奇的值;例如,它不是 0x00 的七个字节。为空的变量的长度为零字节。
请记住,Oracle 没有定义如何为给定数据类型存储 null,因为 null 的定义实际上是 "NOT DEFINED"。这就是为什么,例如:
SELECT 1
从双
其中 NULL = NULL;
returns 没什么。您不能将一个 "undefined" 与另一个 "undefined" 进行比较并期待等效性。
In PL/SQL DATE
数据类型存储固定长度的值。它们以二进制格式存储,但以默认格式显示为字符。
考虑以下声明:
v_regdate DATE;
这里v_regdate
没有初始化,因此它的值为NULL。只是想知道 NULL 如何以二进制格式存储。
如果给定日期(实际上是任何数据类型)变量/列的值为空,则不会存储任何内容。 Null 只是 shorthand 什么都没有,nada,zip(至少就存储的数据而言)。
从这个测试用例可以看出:
create table test (col1 number, col2 date);
insert into test (col1) values (1);
insert into test (col1, col2) values (2, sysdate);
commit;
select col1,
to_char(col2, 'dd/mm/yyyy hh:mi:ss') col2,
dump(col1) col1_dump,
dump(col2) col2_dump
from test;
COL1 COL2 COL1_DUMP COL2_DUMP
---------- ------------------- -------------------- ----------------------------------------
1 Typ=2 Len=2: 193,2 NULL
2 28/01/2015 11:12:33 Typ=2 Len=2: 193,3 Typ=12 Len=7: 120,115,1,28,12,13,34
drop table test;
注意 col2 的转储报告的 "NULL" 空值;这意味着 "there is nothing stored in this column for this row".
In PL/SQL DATE datatype stores fixed length values ...
这不太正确。一个日期有一个使用七个字节的内部表示,是的,所有实际日期的长度都是七个字节,如果你想这样看的话。你可以在@boneist 的回答中的 dump()
中看到,所以我不会重复它。
但是 null 值不会将这七个字节全部设置为某个值 - 如果您正在寻找它,它就不是一个神奇的值;例如,它不是 0x00 的七个字节。为空的变量的长度为零字节。
请记住,Oracle 没有定义如何为给定数据类型存储 null,因为 null 的定义实际上是 "NOT DEFINED"。这就是为什么,例如:
SELECT 1 从双 其中 NULL = NULL;
returns 没什么。您不能将一个 "undefined" 与另一个 "undefined" 进行比较并期待等效性。