【发布时间】:2016-06-22 16:10:13
【问题描述】:
我的数据库有NLS_LANGUAGE:AMERICAN / NLS_CHARACTERSET:WE8ISO8859P15 / NLS_NCHAR_CHARACTERSET:AL16UTF16; NLS_LANG 在我的 Windows> 属性> 高级系统设置> 高级> 环境变量中设置为 AMERICAN_AMERICA.WE8MSWIN1252 - 希望它适用于我的 PLSQL 开发人员。
我使用ASCIISTR 为这样的奇异字符获取 unicode 编码值:
SELECT ASCIISTR(N'κόσμε') FROM DUAL;
结果
ASCIISTR(UNISTR('\03BA\1F79\03...
---------------------------------
\03BA\1F79\03C3\03BC\03B5
看起来“N”表示该字符串是 unicode,因为如果我不指定它,我会得到错误的编码。
SELECT ASCIISTR('κόσμε') FROM DUAL;
结果
ASCIISTR('??SµE')
--------------------
??s\00B5e
这个“N”代表什么?如何在 PLSQL 中调用它?
我打算在 pl/sql 变量上使用它来编码像这样的外来字符:
DECLARE
l_in VARCHAR2(2000);
l_ec VARCHAR2(2000);
l_dc VARCHAR2(2000);
BEGIN
l_in := 'κόσμε';
execute immediate 'select ASCIISTR(N'''||l_in||''') from dual' into l_ec;
DBMS_OUTPUT.PUT_LINE(l_ec);
select unistr(l_ec) into l_dc from dual;
DBMS_OUTPUT.PUT_LINE (l_dc);
END;
但我明白了
??s\00B5e
??sµe
好像我在上面的第二种情况下,没有'N'
【问题讨论】: