使用 Oracle SQL Loader (sqlldr) 加载 Unicode 字符会导致问号

phi*_*bin 6 csv oracle unicode sql-loader

我正在尝试使用 SQL Loader 将本地化字符串从 unicode(UTF8 编码)csv 加载到 Oracle 数据库中。我已经尝试了各种组合,但似乎没有给我我正在寻找的结果,即有特殊的希腊字符,如 (\xce\x94) 不会转换为 \xc3\x8e\xe2\x80\ x9d 或 \xc2\xbf。

\n\n

我的表定义如下所示:

\n\n
CREATE TABLE "GLOBALIZATIONRESOURCE"\n(\n    "RESOURCETYPE" VARCHAR2(255 CHAR) NOT NULL ENABLE,\n    "CULTURE"      VARCHAR2(20 CHAR) NOT NULL ENABLE,\n    "KEY"          VARCHAR2(128 CHAR) NOT NULL ENABLE,\n    "VALUE"        VARCHAR2(2048 CHAR),\n    "DESCRIPTION"  VARCHAR2(512 CHAR),\n    CONSTRAINT "PK_GLOBALIZATIONRESOURCE" PRIMARY KEY ("RESOURCETYPE","CULTURE","KEY") USING INDEX TABLESPACE REPSPACE_IX ENABLE\n)\nTABLESPACE REPSPACE; \n
Run Code Online (Sandbox Code Playgroud)\n\n

我已经在我的控制文件中尝试了以下配置(实际上是我能想到的每个排列)

\n\n
load data\nTRUNCATE\nINTO TABLE "GLOBALIZATIONRESOURCE"\nFIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY \'"\'\nTRAILING NULLCOLS\n(   \n    "RESOURCETYPE" CHAR(255), \n    "CULTURE" CHAR(20), \n    "KEY" CHAR(128), \n    "VALUE" CHAR(2048), \n    "DESCRIPTION" CHAR(512)\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n
load data\nCHARACTERSET UTF8\nTRUNCATE\nINTO TABLE "GLOBALIZATIONRESOURCE"\nFIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY \'"\'\nTRAILING NULLCOLS\n(   \n    "RESOURCETYPE" CHAR(255), \n    "CULTURE" CHAR(20), \n    "KEY" CHAR(128), \n    "VALUE" CHAR(2048), \n    "DESCRIPTION" CHAR(512)\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n
load data\nCHARACTERSET UTF16\nTRUNCATE\nINTO TABLE "GLOBALIZATIONRESOURCE"\nFIELDS TERMINATED BY X\'002c\' OPTIONALLY ENCLOSED BY X\'0022\'\nTRAILING NULLCOLS\n(   \n    "RESOURCETYPE" CHAR(255), \n    "CULTURE" CHAR(20), \n    "KEY" CHAR(128), \n    "VALUE" CHAR(2048), \n    "DESCRIPTION" CHAR(512)\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用前两个选项,unicode 字符不会被编码,只是显示为颠倒的问号。

\n\n

如果我选择最后一个选项 UTF16,那么即使我的字段中的所有数据都比指定的长度短得多,我也会收到以下错误。

\n\n
Field in data file exceeds maximum length\n
Run Code Online (Sandbox Code Playgroud)\n\n

似乎 ctl 文件配置的每种可能的组合(甚至将字节顺序设置为小和大)都无法正常工作。有人可以给出一个正确从 csv 加载 unicode 数据的配置示例(表结构和 CTL 文件)吗?任何帮助将不胜感激。

\n\n

注意:我已经去过http://docs.oracle.com/cd/B19306_01/server.102/b14215/ldr_concepts.htm,http://docs.oracle.com/cd/B10501_01/server.920 /a96652/ch10.htmhttp://docs.oracle.com/cd/B10501_01/server.920/a96652/ch10.htm

\n

小智 1

您必须确保以下字符集相同:

  1. 数据库字符集
  2. 转储文件字符集
  3. 您从中进行导入的客户端 (NLS_LANG)

如果客户端字符集不同,oracle 将尝试执行到本机数据库字符集的字符转换,但这可能并不总是提供所需的结果。