【问题标题】:change charset utf8 in oracle在 oracle 中更改字符集 utf8
【发布时间】:2020-02-06 08:32:30
【问题描述】:

我在将哈萨克语中的数据从一个 db oracle 转换到另一个 oracle 时遇到问题。源数据库有AL32UTF8 NLS_CHARACTERSET(根据v$nls_parameters),目标有CL8MSWIN1251 如何解决这个问题? 我用 informatica 插入了 raw

【问题讨论】:

  • 您是否在系统上设置了 NLS_LANG?
  • 是的,我设置了 BEGIN EXECUTE IMMEDIATE 'alter session set nls_langUAGE = ''RUSSIAN''';结束;
  • 您不能使用任何 SQL 命令设置NLS_LANGNLS_LANG <> NLS_LANGUAGE! NLS_LANG 只能在客户端级别设置,通常来自环境或注册表(在 Windows 的情况下)
  • 我可以在会话操作系统中设置吗?在 redhat 上运行的 Informatica 服务

标签: oracle character-encoding nls-lang


【解决方案1】:

HOW TO: Set the Oracle NLS_LANG environment variable

将托管 Informatica 服务的计算机上的 NLS_LANG 环境变量设置为 Oracle 客户端操作系统正在使用的值。

对我来说,不清楚“Oracle 客户端操作系统正在使用的值”是什么意思。

如果 Informatica 在 Linux/Unix 上运行,那么它可能会很容易。检查locale charmapecho $LANG

在 Windows 上,您实际上有两个字符集。 OEM 代码页,适用于控制台(也称为 DOS 窗口)和 ANSI 代码页,通常适用于 GUI 应用程序。

您可以使用命令 chcp 查询(和修改)的 OEM 代码页

您可以从注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\ACP 获取来自 National Language Support (NLS) API Reference 的 ANSI 代码页

我不知道哪个适用于 Informatica,但您应该可以尝试。

【讨论】:

  • Linux redhat 上的 informatica。现在有 en_US.UTF8。如果我正确,我应该在目标数据库主机中更改全局设置吗?有没有办法在操作系统会话中做到这一点?
  • 然后将 NLS_LANG 设置为 .AL32UTF8(语言和地区可以跳过,因为 NLS_LANG 的所有组件都是可选的)
  • 您不能在数据库上设置 NLS_LANG - 这是一个仅限客户端的设置。请参阅stackoverflow.com/questions/33783902/… 了解更多信息
【解决方案2】:
The Problem was in code type in target database. Client support utf16.
I decieded to solve it with translate function.

create or replace function fix_kaz_letters(p_word in varchar2) return varchar2 deterministic
  PARALLEL_ENABLE is
  c_bad_letters CONSTANT VARCHAR2(18 CHAR) := CHR(1112 USING NCHAR_CS) /*ә*/
                                              || CHR(1032 USING NCHAR_CS) /*Ә*/
                                              || CHR(1110 USING NCHAR_CS) /*і*/
                                              || CHR(1030 USING NCHAR_CS) /*І*/
                                              || CHR(1169 USING NCHAR_CS) /*ө*/
                                              || CHR(1168 USING NCHAR_CS) /*Ө*/
                                              || CHR(1111 USING NCHAR_CS) /*ү*/
                                              || CHR(1031 USING NCHAR_CS) /*Ү*/
                                              || CHR(1118 USING NCHAR_CS) /*ұ*/
                                              || CHR(1038 USING NCHAR_CS) /*Ұ*/
                                              || CHR(1171 USING NCHAR_CS) /*ғ*/
                                              || CHR(1170 USING NCHAR_CS) /*Ғ*/
                                              || CHR(1179 USING NCHAR_CS) /*қ*/
                                              || CHR(1178 USING NCHAR_CS) /*Қ*/
                                              || CHR(1187 USING NCHAR_CS) /*ң*/
                                              || CHR(1186 USING NCHAR_CS) /*Ң*/
   ;
  c_kaz_letters CONSTANT VARCHAR2(18 NCHAR) := CHR(1241 USING NCHAR_CS) /*ә*/
                                               || CHR(1240 USING NCHAR_CS) /*Ә*/
                                               || CHR(1110 USING NCHAR_CS) /*і*/
                                               || CHR(1030 USING NCHAR_CS) /*І*/
                                               || CHR(1257 USING NCHAR_CS) /*ө*/
                                               || CHR(1256 USING NCHAR_CS) /*Ө*/
                                               || CHR(1199 USING NCHAR_CS) /*ү*/
                                               || CHR(1198 USING NCHAR_CS) /*Ү*/
                                               || CHR(1201 USING NCHAR_CS) /*ұ*/
                                               || CHR(1200 USING NCHAR_CS) /*Ұ*/
                                               || CHR(1108 USING NCHAR_CS) /*ғ*/
                                               || CHR(1028 USING NCHAR_CS) /*Ғ*/
                                               || CHR(1116 USING NCHAR_CS) /*қ*/
                                               || CHR(1036 USING NCHAR_CS) /*Қ*/
                                               || CHR(1109 USING NCHAR_CS) /*ң*/
                                               || CHR(1029 USING NCHAR_CS) /*Ң*/
   ;
begin
  return translate(p_word, c_bad_letters, c_kaz_letters);
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2010-11-12
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2014-07-09
    相关资源
    最近更新 更多