【发布时间】:2010-10-19 21:14:14
【问题描述】:
Oracle 中表名和列名的最大长度是多少?
【问题讨论】:
标签: oracle name-length
Oracle 中表名和列名的最大长度是多少?
【问题讨论】:
标签: oracle name-length
在我处理的 10g 数据库中,我知道表名最多为 30 个字符。无法告诉您列名长度是多少(但我知道它大于 30)。
【讨论】:
在Oracle 12.2 及以上的最大对象名称长度为 128 字节。
在Oracle 12.1 及以下的最大对象名称长度为 30 个字节。
【讨论】:
注意数据类型和大小
>describe all_tab_columns
VIEW all_tab_columns
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME NOT NULL VARCHAR2(30)
DATA_TYPE VARCHAR2(106)
DATA_TYPE_MOD VARCHAR2(3)
DATA_TYPE_OWNER VARCHAR2(30)
DATA_LENGTH NOT NULL NUMBER
DATA_PRECISION NUMBER
DATA_SCALE NUMBER
NULLABLE VARCHAR2(1)
COLUMN_ID NUMBER
DEFAULT_LENGTH NUMBER
DATA_DEFAULT LONG
NUM_DISTINCT NUMBER
LOW_VALUE RAW(32)
HIGH_VALUE RAW(32)
DENSITY NUMBER
NUM_NULLS NUMBER
NUM_BUCKETS NUMBER
LAST_ANALYZED DATE
SAMPLE_SIZE NUMBER
CHARACTER_SET_NAME VARCHAR2(44)
CHAR_COL_DECL_LENGTH NUMBER
GLOBAL_STATS VARCHAR2(3)
USER_STATS VARCHAR2(3)
AVG_COL_LEN NUMBER
CHAR_LENGTH NUMBER
CHAR_USED VARCHAR2(1)
V80_FMT_IMAGE VARCHAR2(3)
DATA_UPGRADED VARCHAR2(3)
HISTOGRAM VARCHAR2(15)
【讨论】:
describe user_mview_logs 返回 LOG_TABLE VARCHAR2(128),但如果您尝试任何接近 30 个字符或更多字符的实体化视图日志名称,您会得到一些非常令人费解的结果。
【讨论】:
DESCRIBE all_tab_columns
将显示一个 TABLE_NAME VARCHAR2(30)
注意 VARCHAR2(30) 表示 30 个字节的限制,而不是 30 个字符的限制,因此如果您的数据库配置/设置为使用多字节字符集,则可能会有所不同。
迈克
【讨论】:
是的,但是只要您使用 ASCII 字符,即使是多字节字符集仍然会限制 30 个字符...所以除非您想在数据库名称中放入心形和微笑的猫,否则您就可以了... .
【讨论】:
更新:如上所述,在 Oracle 12.2 及更高版本中,最大对象名称长度现在为 128 字节。
这篇文章的其余部分适用于 Oracle 12.1 及更低版本:当时的限制是 30 个字符(实际上是字节)。
但不要相信我的话;自己试试这个(在 Oracle 12.1 或更低版本上):
SQL> create table I23456789012345678901234567890 (my_id number);
Table created.
SQL> create table I234567890123456789012345678901(my_id number);
ERROR at line 1:
ORA-00972: identifier is too long
【讨论】:
最大名称大小为 30 个字符,因为数据字典只允许存储 30 个字节
【讨论】:
Oracle 数据库对象名称的最大长度为 30 字节。
对象名称规则: http://docs.oracle.com/database/121/SQLRF/sql_elements008.htm
【讨论】:
表和列名的最大长度为 128 字节或 128 个字符。 此限制适用于使用 sybase 数据库用户。我彻底验证了这个答案,所以我自信地发布了这个答案。
【讨论】:
我正在开发 Oracle 12c 12.1。但是,它似乎不允许列/表名称超过 30 个字符。
阅读一个提到 30 个字节的 oracle 页面。 https://docs.oracle.com/database/121/SQLRF/sql_elements008.htm#SQLRF00223
在 12c 中,虽然 all_tab_columns 对 Table_Name 说 VARCHAR2(128),但它不允许超过 30 个字节的名称。
找到另一篇关于 12c R2 的文章,它似乎允许最多 128 个字符。 https://community.oracle.com/ideas/3338
【讨论】:
在Oracle 12.2,可以使用内置常量ORA_MAX_NAME_LEN,
设置为 128 字节(根据 12.2)
在Oracle 12.1 之前,最大大小为 30 字节。
【讨论】: