您的位置:首页 > 数据库

plsql 中文乱码

2016-03-03 17:18 405 查看
plsql 中文乱码,

中文还是用ZHS16GBK



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

在使用plsql的机器上,打开注册表,

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home2.

找到 NLS_LANG 键,他的值原来是:American 。。。。

修改为:SIMPLIFIED CHINESE_CHINA.AL32UTF8

用sql查看oracle的字符集

select userenv('language') from dual;

把oracle的字符集从AL32UTF8改为ZHS16GBK

登录SQL Plus

conn /as sysdba

[b]shutdown immediate;[/b]

在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

NAS_LANGUAGE

SIMPLIFIED CHINESE

NLS_TERRITORY

CHINA

……

SQL> shutdown immediate;

SQL> startup

plsql

设置完注册表后,接下来设置我们的环境变量,计算机(右键) --->属性--->高级系统设置--->高级--->环境变量--->新建,个人建议新建用户变量,变量名输入:“NLS_LANG”,变量值输入:“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”。点击确定即可,到此我们就设置完了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: