如何在导出Oracle脚本时不丢失元音的重音符号

时间:2015-08-05 18:15:21

标签: oracle oracle-sqldeveloper non-ascii-characters

我通过在SQLDeveloper中运行脚本

在Oracle中导出数据库

这是完整脚本的一部分:

WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK
Insert into WSLC_CAT_MOD (ID_OPER,DSC_MOD,FCH_MOD) values (14,'Contingencia - Importaci'|| CHR(243) ||'n de Archivos',to_date('15/01/15','DD/MM/RR'));

当我在WSLC_CAT_MOD表中查询时,我期待这样的事情:

14 | Contingencia - Importación de Archivos | 15/01/15

但是我得到了这个:

14 | Contingencia - Importacin de Archivos | 15/01/15

我无法获得任何带重音的角色(á,é,í,ó,ú)

1 个答案:

答案 0 :(得分:0)

您可以使用unistr代替chr;传递您当前使用的十进制值的十六进制等效值 - 例如对于243,即00f3

insert into WSLC_CAT_MOD (ID_OPER,DSC_MOD,FCH_MOD)
values (14,
  'Contingencia - Importaci'|| unistr('\00f3') ||'n de Archivos',
  to_date('15/01/15','DD/MM/RR'));

   ID_OPER DSC_MOD                                            FCH_MOD 
---------- -------------------------------------------------- ---------
        14 Contingencia - Importación de Archivos             15-JAN-15

您的数据库和客户端字符集当然很重要(正如Justin Cave指出的那样)。默认情况下,SQL Developer会从您的操作系统区域设置中选择您的语言和编码,您可以使用首选项覆盖某些内容。

您可以运行查询以查看它如何解释chr / unistr;这是OS X上的SQL Developer:

select chr(243), dump(chr(243)), unistr('\00f3'), dump(unistr('\00f3')) from dual;

C DUMP(CHR(243))   U DUMP(UNISTR('\00F3
- ---------------- - ------------------
  Typ=1 Len=1: 243 ó Typ=1 Len=2: 0,243

使用许多NLS_LANG设置不会运行SQL * Plus; AL32UTF8(与我的数据库字符集相匹配)没问题,但是对于US7ASCII,WE8MSWIN1252,WE8ISO8859P1等甚至普通的UTF8,只需选择chr(243)即可:

ORA-29275: partial multibyte character