2012-08-16 51 views
4

使用SQL * Loader加載日文數據時出現以下錯誤。我的數據庫是UTF8(NLS參數),我的操作系統支持UTF8。使用utf8的SQL加載器

Record 5: Rejected - Error on table ACTIVITY_FACT, column METADATA. 
ORA-12899: value too large for column METADATA (actual: 2624, maximum: 3500) 

我的控制文件:

load data 
characterset UTF8 
infile '../tab_files/activity_fact.csv' "STR ';'" 
APPEND 
into tableactivity_fact 
fields terminated by ',' optionally enclosed by '~' 
TRAILING NULLCOLS 
(metadata CHAR(3500)) 

我的表

create table actvuty_facr{ 
metadata varchar2(3500 char) 
} 

爲什麼SQL裝載機拋出了錯誤例外,(actual: 2624, maximum: 3500)。 2624小於3500.

+1

UTF8是一個多字節字符集。理論上2624個字符可以是10,496字節。我的猜測是,在SQL * Loader中,char(3500)是_byte_語義。試着把它提高到14,000。 – Ben 2012-08-16 07:54:05

+0

嗨本,我試圖字符(14000)了。但沒有奏效。 – AbhiDwi 2012-08-16 08:54:19

+0

我認爲你有和我一樣的情況:http://stackoverflow.com/q/12393579/706012 – 2012-09-17 07:39:14

回答

5

所有數據文件(UFT-16除外)的默認長度語義都是字節。所以在你的情況下,你有一個3500字節的CHAR而不是字符。您的文件中有一些多字節字符,因此2624個字符使用了超過3500個字節,因此(誤導性)消息。

您可以通過使用字符長度語義,而不是

改變你的控制文件這一行

characterset UTF8 

這個

characterset UTF8 length semantics char 

排序了這一點,它將對CHAR字符工作字段(以及其他一些字段) - 與設置表格的方式相同,因此每個字符最多爲3500個字符。

參見Character Length Semantics實用程序指南以獲取更多信息