我尝试使用nvarchar2
数据类型在包规范中添加常量,但在编译之后,它会在数据库中存储类似???
的内容。例如,我尝试为亚美尼亚词մեկ
x constant nvarchar2(3) default 'մեկ';
有人可以建议解决这个问题,或者不可能这样做吗?
答案 0 :(得分:0)
我已经在两个具有不同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 |
+----+------------------------+-------------+
结果如下,在带有charset AL32UTF8
变量的数据库上正确显示,在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