原NLS配置:
[oracle@node139 ~]$ echo $NLS_LANG
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
配置不同的字符集Oracle存储编码
1)gbk字符集
[oracle@node139 ~]$ export NLS_LANG=american_america.ZHS16GBK
SQL>sqlplus / as sysdba
SQL>create table characterset_test(id int,code varchar(20),name varchar(200));
SQL>insert into characterset_test values(2,'ZHS16GBK','系统集成中心');
SQL>commit;
SQL> exit
现在NLS换成其它字符集:
2)utf8字符集
[oracle@node139 ~]$ export NLS_LANG=american_america.utf8
[oracle@node139 ~]$ sqlplus / as sysdba
SQL>insert into characterset_test values(1,'utf8','系统集成中心');
SQL>Commit;
查看前后两次插入的数据:
col code format a20
col name format a30
select * from characterset_test; #发生乱码
查看数据列的字符编码
这个中文字符相同,但存入数据库中的元数据(字符)是不相同的,如下:
select id,code,name,dump(name,1018) from characterset_test;
总结:NLS_LANG的配置一定和客户端操作系统的字符集一样,这样才能避免字符乱码