Oracle复合列VARCHAR最大长度及ORA-01450错误咨询
Oracle 复合VARCHAR列主键的长度限制问题
问题场景
执行以下建表语句时触发ORA-01450错误:
CREATE TABLE test1( col1 varchar(4000) NOT NULL, col2 varchar(4000) NOT NULL, col3 varchar(4000), col4 varchar(4000), col5 varchar(4000) NOT NULL, col6 varchar(4000), col7 varchar(4000), PRIMARY KEY(col1, col2, col3) )
错误信息:
ORA-01450: maximum key length (6398) exceeded
01450. 00000 - "maximum key length (%s) exceeded"
核心答案
Oracle中,复合主键(以及普通复合索引)的总字节长度上限为6398字节,该数值已在错误提示中明确给出。
原因分析
你定义的主键包含三个VARCHAR(4000)列:
- 若使用单字节字符集(如ASCII、单字节UTF-8),每个列最大占用4000字节,三个列总长度为12000字节,远超6398字节的限制,因此触发报错。
- 若使用多字节字符集(如多字节UTF-8),每个字符可能占用2-4字节,实际总字节数会更大,同样会超出限制。
解决建议
- 缩短主键列的定义长度,确保三个列的总字节数不超过6398字节;
- 更换主键组合,减少主键包含的列数;
- 改用占用字节更少的类型作为主键(比如数字类型、固定长度的哈希值列)。
内容的提问来源于stack exchange,提问作者anurag1007
相关产品推荐
相关产品推荐

