plsql 中文乱码,
中文还是用ZHS16GBK
insert into tt(id,name) values('2','张三');
select * from nls_database_parameters where parameter like 'NLS%CHARACTERSET';
PARAMETER VALUE
NLS_CHARACTERSET AL32UTF8
NLS_NCHAR_CHARACTERSET AL16UTF16
SIMPLIFIED CHINESE_CHINA.AL32UTF8
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
1)在使用plsql的机器上,打开注册表,
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home2.
找到 NLS_LANG 键,他的值原来是:American 。。。。
修改为:SIMPLIFIED CHINESE_CHINA.AL32UTF8
用sql查看oracle的字符集
select userenv('language') from dual;
2)把oracle的字符集从AL32UTF8改为ZHS16GBK
在SQL Puls中的命令如下:
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已关闭。
已经卸载数据库。
SQL> startup mount
ORACLE例程已经启动。
……
………………
…………………………
数据库装载完毕。
SQL> ALTER SYSTEM ENABLE RESTRICTED
SESSION;
系统已更改。
SQL> ALTER SYSTEM SET
JOB_QUEUE_PROCESSES=0;
系统已更改。
SQL> ALTER SYSTEM SET
AQ_TM_PROCESSES=0;
系统已更改。
SQL> alter database open;
数据库已更改。
SQL> ALTER DATABASE CHARACTER SET
ZHS16GBK;
第1行出现错误:
ORA-12712: new character set must be a superset of old character
set
提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:
SQL> ALTER DATABASE character set INTERNAL_USE
ZHS16GBK;
数据库已更改。
--我们看到这个过程和之前ALTER
DATABASE CHARACTER SET操作的内部过程是完全相同的,也就是说INTERNAL_USE提供的帮助就是使Oracle数据库绕过了子集与超集的校验.
SQL> select * from v$nls_parameters;
RARAMETER
VALUE
NLS_LANGUAGE
SIMPLIFIED CHINESE
NLS_TERRITORY
CHINA
……
SQL> shutdown immediate;
SQL> startup
plsql
3)设置电脑环境变量。
设置完注册表后,接下来设置我们的环境变量,计算机(右键) --->属性--->高级系统设置--->高级--->环境变量--->新建,个人建议新建用户变量,变量名输入:“NLS_LANG”,变量值输入:“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”。点击确定即可,到此我们就设置完了
4)修改nls_language 参数
alter system set nls_language='SIMPLIFIED CHINESE' scope = spfile;
alter system set nls_territory='CHINA' scope=spfile;