3.插入测试数据。
insert into char_test(name_char,name_nchar) VALUES(‘㱔’,‘㱔’);
insert into char_test(name_char,name_nchar) VALUES(‘𧿹’,‘𧿹’);
insert into char_test(name_char,name_nchar) VALUES(‘㛃’,‘㛃’);
4.查询相关数据
SELECT * FROM char_test;
SQL> SELECT * FROM char_test;
结果:乱码
场景2: AL32UTF8 AL16UTF16
1.查看数据库字符集情况
SQL> set linesize 1000
SQL> set pagesize 0
SQL> select * from v$nls_parameters;
NLS_LANGUAGE AMERICAN 0
NLS_TERRITORY AMERICA 0
NLS_CURRENCY $ 0
NLS_ISO_CURRENCY AMERICA 0
NLS_NUMERIC_CHARACTERS ., 0
NLS_CALENDAR GREGORIAN 0
NLS_DATE_FORMAT DD+MON+RR 0
NLS_DATE_LANGUAGE AMERICAN 0
NLS_CHARACTERSET AL32UTF8 0
NLS_SORT BINARY 0
NLS_TIME_FORMAT HH.MI.SSXFF AM 0
NLS_TIMESTAMP_FORMAT DD+MON+RR HH.MI.SSXFF AM 0
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR 0
NLS_TIMESTAMP_TZ_FORMAT DD+MON+RR HH.MI.SSXFF AM TZR 0
NLS_DUAL_CURRENCY $ 0
NLS_NCHAR_CHARACTERSET AL16UTF16 0
NLS_COMP BINARY 0
NLS_LENGTH_SEMANTICS BYTE 0
NLS_NCHAR_CONV_EXCP FALSE 0
3.插入测试数据。
insert into char_test(name_char,name_nchar) VALUES(‘㱔’,‘㱔’);
insert into char_test(name_char,name_nchar) VALUES(‘𧿹’,‘𧿹’);
insert into char_test(name_char,name_nchar) VALUES(‘㛃’,‘㛃’);
1、查询varchar2的结果:
select utl_raw.cast_to_varchar2(‘3c54’) from dual;
select utl_raw.cast_to_varchar2(‘d85fdff9’) from dual;
select utl_raw.cast_to_varchar2(‘36c3’) from dual;
结果:乱码
2、查询nvarchar2的结果:
select utl_raw.cast_to_nvarchar2(‘3c54’) from dual;
select utl_raw.cast_to_nvarchar2(‘d85fdff9’) from dual;
select utl_raw.cast_to_nvarchar2(‘36c3’) from dual;
结果:正常显示
测试发现,下面的nvarchar2 查询可以正常查询
insert into char_test values ((select utl_raw.cast_to_nvarchar2(‘3c54’) from dual),(select utl_raw.cast_to_nvarchar2(‘3c54’) from dual));
insert into char_test values ((select utl_raw.cast_to_nvarchar2(‘d85fdff9’) from dual),(select utl_raw.cast_to_nvarchar2(‘d85fdff9’) from dual));
insert into char_test values ((select utl_raw.cast_to_nvarchar2(‘36c3’) from dual),(select utl_raw.cast_to_nvarchar2(‘36c3’) from dual));
1、查询varchar2的结果:
select utl_raw.cast_to_varchar2(‘3c54’) from dual;
select utl_raw.cast_to_varchar2(‘d85fdff9’) from dual;
select utl_raw.cast_to_varchar2(‘36c3’) from dual;
结果: 乱码
2、查询nvarchar2的结果:
select utl_raw.cast_to_nvarchar2(‘3c54’) from dual;
select utl_raw.cast_to_nvarchar2(‘d85fdff9’) from dual;
select utl_raw.cast_to_nvarchar2(‘36c3’) from dual;
结果: 乱码
测试发现,下面的nvarchar2 查询可以正常查询
insert into char_test values ((select utl_raw.cast_to_nvarchar2(‘3c54’) from dual),(select utl_raw.cast_to_nvarchar2(‘3c54’) from dual));
insert into char_test values ((select utl_raw.cast_to_nvarchar2(‘d85fdff9’) from dual),(select utl_raw.cast_to_nvarchar2(‘d85fdff9’) from dual));
insert into char_test values ((select utl_raw.cast_to_nvarchar2(‘36c3’) from dual),(select utl_raw.cast_to_nvarchar2(‘36c3’) from dual));
commit;
select * from char_test;
结果: 乱码
场景5:ZHS16GBK UTF8
字符集ZHS16GBK 国家字符集UTF8 怎么办?
update char_test set name_nchar = N’㛃’ where name_nchar=‘z’
insert into char_test( name_nchar) VALUES(N’㱔’);
SELECT * FROM zc.char_test;
㛃
𧿹
㱔
查询正常
这个时候表里面的数据是正常的。
场景6: AL32UTF8 AL16UTF16
update char_test set name_nchar = N’㛃’ where name_nchar=‘z’