为什么 ROWID 数据类型表示为字符子类型 - Oracle SQL
Why is ROWID data type represented as a character subtype - Oracle SQL
在我搜索时,Oracle has a separate category for ROWID while in tutorialspoint 将其归类为字符子类型。正如您在 Oracle Data Type 页面中看到的那样,ROWID 确实是使用字符表示的。但为什么它存储为字符类型而不是数字类型(尤其是整数)? ROWID在物理层中是否也存储为字符?
我认为 tutorialspoint 有点过于简单化了。当您使用它时,它只是看起来像一种字符类型。
它不像字符类型那样存储。事实上,要对其进行字符操作(例如 CONCAT),您必须将其转换为字符类型。至于为什么表示为字符类型,这可能只是可以将in/copy-and-pasted from/typed显示为SQL查询的东西的一个很好的折衷工具,但可以比简单的数字更密集地存储信息。如果它只是数字,它可能会很长,因为它是一个 80 位数字...
A number encoded in base 64 using letters and numbers,这就是 ROWID 的实际含义,换句话说,与原始的 10 字节数字相比,人类处理起来要容易得多。
与其他所有内容一样,它以字节形式存储。
例如 'AAAACOAABAAAAR5AAA'
存储为 00 00 00 8e 00 40 04 79 00 00
。但前提是您创建并填充用户列。使用
选择的 ROWID
SELECT ROWID FROM some_table
没有存储在任何地方,它是行的物理地址,格式为:
object id, file number (for small file tablespaces), block number, block offset
ROWID 元素以 Base64 编码形式显示。
在我搜索时,Oracle has a separate category for ROWID while in tutorialspoint 将其归类为字符子类型。正如您在 Oracle Data Type 页面中看到的那样,ROWID 确实是使用字符表示的。但为什么它存储为字符类型而不是数字类型(尤其是整数)? ROWID在物理层中是否也存储为字符?
我认为 tutorialspoint 有点过于简单化了。当您使用它时,它只是看起来像一种字符类型。
它不像字符类型那样存储。事实上,要对其进行字符操作(例如 CONCAT),您必须将其转换为字符类型。至于为什么表示为字符类型,这可能只是可以将in/copy-and-pasted from/typed显示为SQL查询的东西的一个很好的折衷工具,但可以比简单的数字更密集地存储信息。如果它只是数字,它可能会很长,因为它是一个 80 位数字...
A number encoded in base 64 using letters and numbers,这就是 ROWID 的实际含义,换句话说,与原始的 10 字节数字相比,人类处理起来要容易得多。
与其他所有内容一样,它以字节形式存储。
例如 'AAAACOAABAAAAR5AAA'
存储为 00 00 00 8e 00 40 04 79 00 00
。但前提是您创建并填充用户列。使用
ROWID
SELECT ROWID FROM some_table
没有存储在任何地方,它是行的物理地址,格式为:
object id, file number (for small file tablespaces), block number, block offset
ROWID 元素以 Base64 编码形式显示。