oracle varchar max低于指定的值

时间:2013-06-04 09:14:37

标签: oracle oracle10g varchar2

我有一个包含列varchar2(4000)的表,我在插入数据时遇到问题,这样:

ORA-12899: value too large for column "XXX"."YYY"."ZZZ" (actual: 2132, maximum: 2048) 

当我跑步时

select * from user_tab_columns where table_name = 'YYY'

我可以看到一个大小为2048的CHAR_LENGTH列,但除此之外我没有跟踪为什么它会自行抢占?

CHARACTER_SET_NAME是CHAR_CS,但内容大多是base64编码的。任何线索如何克服这个问题?

此致

更新

这是完整的user_tab_columns,对不起缩进。

TABLE_NAME  COLUMN_NAME DATA_TYPE   DATA_TYPE_MOD   DATA_TYPE_OWNER DATA_LENGTH DATA_PRECISION  DATA_SCALE  NULLABLE    COLUMN_ID   DEFAULT_LENGTH  DATA_DEFAULT    NUM_DISTINCT    LOW_VALUE   HIGH_VALUE  DENSITY NUM_NULLS   NUM_BUCKETS LAST_ANALYZED   SAMPLE_SIZE CHARACTER_SET_NAME  CHAR_COL_DECL_LENGTH    GLOBAL_STATS    USER_STATS  AVG_COL_LEN CHAR_LENGTH CHAR_USED   V80_FMT_IMAGE   DATA_UPGRADED   HISTOGRAM
YYY ZZZ VARCHAR2    <null>  <null>  4,000   <null>  <null>  Y   7   <null>  <null>  15  41  42  43  44  45  46  47      4d  49  49  46  75  7a  43  43  42  4b  4f  67  41  77  49  42  41  67  49  45  54  41  4c  4d  68  6a  41  4e  42  67  6b  71      0.06667 662 1   2013-06-03  929 CHAR_CS 4,000   NO  NO  1,394   2,048   C   NO  YES NONE

2048标记来自CHAR_LENGTH列,CHAR_USED来自C ..

更新: 管理以获得初始DDL

CREATE TABLE "XXX", "YYY"
(
  ...
  "ZZZ" VARCHAR2 (2048 CHAR)
  ...
)

但我仍然不知道如何调整这个数字? 它是否有助于使用简单的alter table并设置varchar2(3192 CHAR)?

1 个答案:

答案 0 :(得分:1)

您的列仅限于2048个字符和4000个字节。无论您的字符长度语义如何,ALL_TAB_COLUMNS.DATA_LENGTH都是“列的长度(以字节为单位)”。 AL32UTF8每个字符最多可以使用4个字节,因此DATA_LENGTH将是字符数* 4.除非它永远不会大于Oracle的4000个限制。

例如:

create table test1(a varchar2(1 char));
create table test2(a varchar2(2 char));
create table test3(a varchar2(1000 char));
create table test4(a varchar2(4000 char));

select table_name, data_length
from all_tab_columns
where table_name like 'TEST_';

TABLE_NAME   DATA_LENGTH
----------   -----------
TEST1        4
TEST2        8
TEST3        4000
TEST4        4000

您可以使用alter table xxx.yyy modify zzz varchar2(4000 char);解决问题。