在Oracle中更改字符集utf8

时间:2019-10-09 03:45:06

标签: oracle character-encoding nls-lang

我无法将哈萨克语中的数据从一个数据库Oracle转换为另一数据库。源数据库具有AL32UTF8 NLS_CHARACTERSET(根据v $ nls_parameters),目标数据库具有CL8MSWIN1251 如何解决呢? 我将原始信息插入了informatica

2 个答案:

答案 0 :(得分:0)

根据HOW TO: Set the Oracle NLS_LANG environment variable

  

将托管Informatica Services的计算机上的NLS_LANG环境变量设置为Oracle Client OS使用的值。

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

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

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

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

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

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

答案 1 :(得分:0)

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;