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

标签 utf-8 oracle11g

我有一个从固定长度文件中读取的外部表。该文件应包含特殊字符。在我的情况下,包含特殊字符的单词是“哥德堡”。由于“ö”是一个特殊字符,因此看起来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 
    

    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/

    相关文章:

    r - 为什么 R 将 UTF-8 header 读取为文本?

    c++ - boost::ireplace 是否可以像基本字符一样对待特殊字符? (例如 'ź' 为 'z' )

    oracle - 为什么截断表不会更改上次 DDL 日期?

    sql - 比较两个日期的提取年份

    oracle - 插入空行

    python - 如何使用 utf-8 将字符串编码为字节数组?

    utf-8 - Qt utf-8编码问题

    c++ - UTF-8 字符的 putText (C++)

    sql - 将按主键数据排序的存储存储在Oracle DB中

    python - libclntsh.so.12.1 的 CX_Oracle 导入错误