如何在Oracle数据库中正确插入商标等特殊字符

时间:2017-05-29 09:29:57

标签: database oracle character-encoding oracle-sqldeveloper nls

我有一个Oracle数据库。我必须执行一些填充nvarchar2列的插入脚本。 insert语句包括一些特殊字符,如“(左引号)”(右引号),™(商标符号)。

create table myTable ( column1 number, column2 nvarchar2(50) );
insert into myTable (column1, column2) values(1, 'Lorem Ipsum™ Sed “dolor sit amet”');

我在SQLDeveloper Editor上运行查询。但是特殊字符会替换为问号,如下所示:

select * from myTable;

Column1     Column2
------      ------------------------------
1           Lorem Ipsum? Sed ?dolor sit amet?

但是当我使用SQLDeveloper GUI向表添加新行时,它很好like this image

数据库NLS参数在这里:

SELECT * FROM NLS_DATABASE_PARAMETERS where PARAMETER in ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');

PARAMETER               VALUE
------------            ------------
NLS_CHARACTERSET        WE8ISO8859P9
NLS_NCHAR_CHARACTERSET  AL16UTF16

如何正确插入上面提到的字符?

1 个答案:

答案 0 :(得分:0)

UNISTR用于可能在不同环境中无效的Unicode字符:

create table myTable ( column1 number, column2 nvarchar2(50) );

insert into myTable (column1, column2)
values(1, 'Lorem Ipsum' || unistr('\2122') || ' Sed ' ||
    unistr('\201C') || 'dolor sit amet' || unistr('\201D'));