我有一个从固定长度文件中读取的外部表。该文件应包含特殊字符。在我的情况下,包含特殊字符的单词是“哥德堡”。由于“ö”是一个特殊字符,因此看起来Oracle将其视为2个字节。那会带来麻烦。文件中的后续字段会移位1个字节,从而使数据困惑。有人遇到过这个问题吗?到目前为止,我们已经尝试了以下解决方案:
将NLS_LANG的值更改为AMERICAN_AMERICA.WE8ISO8859P1
尝试将数据库字符集设置为UTF-8
尝试使用ALTER SYSTEM将NLS_LENGTH_SYMMANTIC更改为CHAR而不是BYTE
尝试将外部表字符集更改为:AL32UTF8
试图将外部表字符集更改为:UTF-8
什么都行不通。
其他详细信息包括:
还有其他我可能会想念的东西吗?任何帮助将不胜感激。谢谢!
最佳答案
nls_length_semantics仅与创建新表有关。
下面是我为解决此问题所做的工作。
records delimited by newline
CHARACTERSET AL32UTF8
STRING SIZES ARE IN CHARACTERS
IE。
ALTER SESSION SET nls_length_semantics = CHAR
/
CREATE TABLE TDW_OWNER.SDP_TST_EXT
(
COST_CENTER_CODE VARCHAR2(10) NULL,
COST_CENTER_DESC VARCHAR2(40) NULL,
SOURCE_CLIENT VARCHAR2(3) NULL,
NAME1 VARCHAR2(35) NULL
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY DBA_DATA_DIR
ACCESS PARAMETERS
( records delimited by newline
CHARACTERSET AL32UTF8
STRING SIZES ARE IN CHARACTERS
logfile DBA_DATA_DIR:'sdp_tst_ext_%p.log'
badfile DBA_DATA_DIR:'sdp_tst_ext_%p.bad'
discardfile DBA_DATA_DIR:'sdp_tst_ext_%p.dsc'
fields
notrim
(
COST_CENTER_CODE CHAR(10)
,COST_CENTER_DESC CHAR(40)
,SOURCE_CLIENT CHAR(3)
,NAME1 CHAR(35)
)
)
LOCATION (DBA_DATA_DIR:'sdp_tst.dat')
)
REJECT LIMIT UNLIMITED
NOPARALLEL
NOROWDEPENDENCIES
/
关于utf-8 - 在Oracle外部表中处理UTF-8字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4944757/