加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Oracle外部表中处理UTF-8字符

发布时间:2020-12-12 13:08:28 所属栏目:百科 来源:网络整理
导读:我有一个从固定长度文件读取的外部表.该文件应包含特殊字符.在我的例子中,包含特殊字符的单词是“G?teborg”.因为“?”是一个特殊字符,看起来Oracle正在将其视为2个字节.这导致了麻烦.文件中的后续字段移位1个字节,从而弄乱了数据.有没有人遇到过这个问题.到
我有一个从固定长度文件读取的外部表.该文件应包含特殊字符.在我的例子中,包含特殊字符的单词是“G?teborg”.因为“?”是一个特殊字符,看起来Oracle正在将其视为2个字节.这导致了麻烦.文件中的后续字段移位1个字节,从而弄乱了数据.有没有人遇到过这个问题.到目前为止,我们尝试了以下解决方案:

将NLS_LANG的值更改为AMERICAN_AMERICA.WE8ISO8859P1
尝试将数据库字符集设置为UTF-8
尝试使用ALTER SYSTEM将NLS_LENGTH_SYMMANTIC更改为CHAR而不是BYTE
尝试将外部表字符集更改为:AL32UTF8
尝试将外部表字符集更改为:UTF-8

什么都行不通.
其他细节包括:

>文件是UTF-8编码的
>操作系统:RHEL
>数据库:Oracle 11g

还有什么我可能会失踪的东西?任何帮助将不胜感激.谢谢!

nls_length_semantics仅适用于创建新表.

以下是我为解决这个问题所做的工作.

records delimited by newline
  CHARACTERSET AL32UTF8
  STRING SIZES ARE IN CHARACTERS

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
/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读