【问题标题】:SQL Loader with utf8带有 utf8 的 SQL 加载器
【发布时间】:2012-08-16 01:27:09
【问题描述】:

使用 SQL*Loader 加载日语数据时出现以下错误。我的数据库是 UTF8(NLS 参数),我的操作系统支持 UTF8。

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 Loader 会抛出错误的异常,(actual: 2624, maximum: 3500)。 2624小于3500。

【问题讨论】:

  • UTF8 是一个多字节字符集。 2624 个字符理论上可以是 10,496 个字节。我的猜测是在 SQL*Loader 中 char(3500)byte 语义。尝试将其提高到 14,000。
  • 嗨,本,我也试过 char(14000)。但是没有用。
  • 我想你的情况和我一样:stackoverflow.com/q/12393579/706012

标签: oracle utf-8 sql-loader


【解决方案1】:

所有数据文件(UFT-16 除外)的默认长度语义是字节。因此,在您的情况下,您的 CHAR 为 3500 字节而不是字符。您的文件中有一些多字节字符,因此 2624 个字符使用了超过 3500 个字节,因此是(误导性的)消息。

您可以改用字符长度语义来解决这个问题

在你的控制文件中修改这一行

characterset UTF8

到这里

characterset UTF8 length semantics char

它适用于 CHAR 字段(和其他一些)的字符 - 与您设置表的方式相同,因此每个字符最多 3500 个字符,最多四个字节。

有关更多信息,请参阅 Character Length Semantics 上的实用程序指南

【讨论】:

    猜你喜欢
    • 2020-11-02
    • 2012-07-27
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 2014-12-03
    • 1970-01-01
    相关资源
    最近更新 更多