Varchar2 数据类型允许系统时间戳

Varchar2 datatype allows systimestamp

我有一个 table 具有如下所示的 varchar2 数据类型

create table t11 (aa varchar2(100),bb varchar2(100));

现在,如果我尝试将 systimestamp 插入上面,则会插入值:

insert into t11 values (systimestamp,systimestamp);
commit;

问题是为什么在 Oracle 中允许这种转换。

我正在使用 Oracle 11g。

您的列类型是 varchar2systimestamp 的 return 类型是 timestamptimestamp 不能直接存储到 varchar2 列中,Oracle 将 timestamp 值隐式转换为 varchar2 并使用 init 参数中指定的规则 NLS_TIMESTAMP_FORMAT.

您可以阅读 Data Conversion Rules and NLS_TIMESTAMP_FORMAT 了解更多详情。

Oracle 具有依赖于 NLS_DATE_FORMAT

的隐式数据转换 Read more about here

Implicit conversion depends on the context in which it occurs and may not work the same way in every case. For example, implicit conversion from a datetime value to a VARCHAR2 value may return an unexpected year depending on the value of the NLS_DATE_FORMAT parameter