【发布时间】:2015-12-06 19:53:31
【问题描述】:
当我搜索时,Oracle 有一个单独的 ROWID 类别,而在 tutorialspoint 中它将它归类为字符子类型。正如在 Oracle 数据类型页面中看到的那样,ROWID 确实是使用字符表示的。但是为什么它像字符类型而不像数字类型(尤其是整数)那样存储呢? ROWID 是否也作为字符存储在物理层中?
【问题讨论】:
标签: sql oracle sqldatatypes rowid
当我搜索时,Oracle 有一个单独的 ROWID 类别,而在 tutorialspoint 中它将它归类为字符子类型。正如在 Oracle 数据类型页面中看到的那样,ROWID 确实是使用字符表示的。但是为什么它像字符类型而不像数字类型(尤其是整数)那样存储呢? ROWID 是否也作为字符存储在物理层中?
【问题讨论】:
标签: sql oracle sqldatatypes rowid
我建议 tutorialspoint 有点过于简单化了。当你使用它时,它只是看起来像一个字符类型。
它不像字符类型那样存储。事实上,要对其进行字符操作(例如 CONCAT),您必须将其转换为字符类型。至于为什么将其表示为字符类型,它可能只是对可以在 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
不存储在任何地方,它是行的物理地址,格式为:
对象id、文件号(对于小文件表空间)、块号、块偏移量
ROWID 元素以 Base64 编码形式显示。
【讨论】: