法一:https://www.cnblogs.com/xingxiudong/p/3986874.html
法二:https://www.cnblogs.com/tiandaochouqinbokeyuan/p/8795512.html
GBK:中国国家标准字符集,是GB2312扩展
ZHS16GBK:是oracle数据库中支持GBK的字符集命名方式。
其格式为<语言><bit位><国家字符集>
法一:https://www.cnblogs.com/xingxiudong/p/3986874.html
SQL>
select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
shutdown immediate
startup mount
alter system enable restricted session;
show parameter job_queue_processes;
alter system set job_queue_processes=0;
alter database open;
alter database character set ZHS16GBK;
alter database character set internal_use ZHS16GBK;
select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
shutdown immediate
startup mount
alter system set job_queue_processes=1000;
alter database open;
shutdown immediate
startup
法二:https://www.cnblogs.com/tiandaochouqinbokeyuan/p/8795512.html
一、oracle server 端 字符集查询
select userenv('language') from dual
其中NLS_CHARACTERSET 为server端字符集
NLS_LANGUAGE 为 server端字符显示形式
二、查询oracle client端的字符集
$ echo $NLS_LANG
三、server端字符集修改
更改字符集步骤方法(WE8ISO8859P1 --> ZHS16GBK)
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
alter database open;
ALTER DATABASE CHARACTER SET ZHS16GBK;
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:
ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
select * from v$nls_parameters;
重启检查是否更改完成
select * from v$nls_parameters
四、修改环境变量
设置oracle用户的的环境
linux下修改环境变量(临时)
export NLS_LANG=SIMPLIFIED Chinese_CHINA.ZHS16GBK
变量名:NLS_LANG
变量值:SIMPLIFIED Chinese_CHINA.ZHS16GBK
Linux/Unix下的设置
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
问题:
一个为HP UNIX环境下,字符集为AMERICAN_AMERICA.US7ASCII,另一个为NT 环境下,字符集为SIMPLIFIED CHINESE_CHINA.ZHS16GBK,现在我将UNIX数据库里的表导进NT环境的数据库里,但用SQLPLUS浏览,表里所有的中文记录都是乱码,我曾将注册表NLS_LANG键值该过,该为AMERICAN_AMERICA.US7ASCII,但乱码仍然出现
可能解决方法:
只通过修改注册表是不能解决的,你可以借助EXECL文件,先修改注册表中的NLS_LANG=AMERICAN_AMERICA.US7ASCII,然后用PL/SQL DEVELOP 或PB将数据到出为EXECL文件,然后将注册表中的NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK,再将数据导入到另一套数据库中