【问题标题】:how to upload special characters with sql loader如何使用 sql loader 上传特殊字符
【发布时间】:2020-12-03 23:40:56
【问题描述】:

我有一个带有特殊字符的文件。我如何必须激活编码才能允许上传此信息。

文件.txt

11|campo2|09/13/2017 11:36:11 PM
12|cáéíóúñ12345aeiou|09/22/2017 02:41:38 PM

从 nls_session_parameters 中选择 *;

控制文件.ctl

OPTIONS (SILENT=(ALL, HEADER))
load data
infile file.txt
badfile file.bad
discardfile file.dis
append
into table TABLE_INFO
fields terminated by '|'
TRAILING NULLCOLS (
  SUB_ID INTEGER EXTERNAL,
  SUB_PROPERTY CHAR(4000),
  MODIFY_TIME DATE TERMINATED BY "|" "to_date(:MODIFY_TIME, 'MM/DD/YYYY HH:MI:SS PM')",
  UPLOAD_DATE DATE TERMINATED BY "|" "to_date('20201215153045', 'YYYYMMDDHH24MISS')",
  FILE_NAME constant "nombre_archivo.txt"
)

表格

create table TABLE_INFO
(
  sub_id       NUMBER(20) not null,
  sub_property VARCHAR2(4000),
  modify_time  DATE,
  upload_date  DATE,
  file_name    VARCHAR2(200)
)
sqlldr userbd/passbd control=ControlFile.ctl log=log_file.log rows=10000 direct=true

【问题讨论】:

标签: oracle character-encoding special-characters sql-loader


【解决方案1】:

你需要考虑三点:

  1. 确保您的数据库能够存储此类字符。这可以被询问

    SELECT * 
    FROM V$NLS_PARAMETERS 
    WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET')
    

    查看NLS_DATABASE_PARAMETERS 也可以

  2. 在您的客户端上使用支持此类字符的字符集。在 Windows 上,您可以执行例如 chcp 65001 以设置 UTF-8

  3. 告诉 Oracle 数据库您的客户端使用哪个字符集。这通常由 NLS_LANG 参数完成,例如SET NLS_LANG=SPANISH_SPAIN.AL32UTF8

在你的 sqlldr 控制文件中你也可以设置

CHARACTERSET character_set_name

优先于NLS_LANG 字符集值(参见Data File Character Sets)。

另见OdbcConnection returning Chinese Characters as "?"

注意,为了正确导入 DATE 值,该字段应指定为

MODIFY_TIME DATE 'MM/DD/YYYY HH:MI:SS PM'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 2015-09-12
    • 1970-01-01
    • 2015-06-10
    • 2014-09-21
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多