Oracle改变了编码

时间:2014-12-01 15:41:49

标签: oracle

select rawtohex(UNISTR('\0436')) from dual

返回0436

update my_table set my_column = UNISTR('\0436') where id = 248149;
SELECT rawtohex(my_column) from my_table where id = 248149;

返回E6

所以我把符号放在UTF8中并在CP1251中取回。为什么这样?

1 个答案:

答案 0 :(得分:0)

您正在将unicode字符串保存到varchar2列中。请考虑将它们保存在nvarchar2类型列中。

create table my_table 
(
id number(10),
my_column varchar2(100),
my_column_uni nvarchar2(100) 
);

insert into my_table values(1,  UNISTR('\0436'), UNISTR('\0436'));
commit;

select rawtohex(my_column), rawtohex(my_column_uni)
  from my_table
 where id = 1;

对于varchar2列,输出为E6,对于nvarchar2列,输出为0436。 Oracle会根据nls parameters更改编码,您可以在其中使用NLS_CHARACTERSETNLS_NCHAR_CHARACTERSET NLS参数。您可以通过查询您的特定参数。

select *
from nls_database_parameters