【发布时间】:2013-06-07 02:08:18
【问题描述】:
我有一个包含 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) 有帮助吗?
【问题讨论】:
-
为什么你认为它是
varchar2(4000)- 来自user_tab_columns的数据类型和数据长度是否支持?你能发布表创建命令吗(最好来自dbms_metadata.get_ddl,以防它不是你想的那样构建的)? -
来自 user_tab_columns..
-
见上面的更新。不知道如何获取dbms_metadata.get_ddl,所以只能假设它是原始sql,这是一个基本的:ZZZ VARCHAR2(4000)
-
你的数据库字符集是什么?
-
来自 nls_database_parameters.... NLS_CHARACTERSET=AL32UTF8, NLS_NCHAR_CHARACTERSET=UTF8, NLS_LENGTH_SEMANTICS=BYTE, NLS_NCHAR_CONV_EXCP=FALSE