我尝试使用nvarchar2数据类型在包规范中添加常量,但在编译之后它在数据库中存储类似于???的内容.例如,我尝试为亚美尼亚语单词մեկ添加常量
x constant nvarchar2(3) default 'մեկ';
任何人都可以建议解决这个问题或者不可能这样做吗?
解决方法
我已经在具有不同NLS_CHARACTERSET配置的两个不同数据库上测试了您的示例.
select * from v$nls_parameters where parameter in ('NLS_NCHAR_CHARACTERSET','NLS_CHARACTERSET','NLS_LANGUAGE')
):
第一:
+----+------------------------+----------+ | id | PARAMETER | VALUE | +----+------------------------+----------+ | 1 | NLS_LANGUAGE | AMERICAN | | 2 | NLS_CHARACTERSET | AL32UTF8 | | 3 | NLS_NCHAR_CHARACTERSET | AL16UTF16| +----+------------------------+----------+
第二:
+----+------------------------+-------------+ | id | PARAMETER | VALUE | +----+------------------------+-------------+ | 1 | NLS_LANGUAGE | RUSSIAN | | 2 | NLS_CHARACTERSET | CL8MSWIN1251| | 3 | NLS_NCHAR_CHARACTERSET | AL16UTF16 | +----+------------------------+-------------+
结果如下,在带有字符集AL32UTF8变量的DB上正确显示,在charset CL8MSWIN1251上有问题’???’.
我没有更改数据库上的资金来验证我的建议.所以我建议你将NLS_CHARACTERSET更改为AL32UTF8应该有所帮助.
我的测试包:
create or replace package question27577711 is x constant nvarchar2(3) default 'մեկ'; function get_constant_x return nvarchar2; end question27577711; create or replace package body question27577711 is function get_constant_x return nvarchar2 is begin return x; end get_constant_x; end question27577711; select question27577711.get_constant_x from dual