plsql 中文乱码

时间:2022-09-26 20:44:11

plsql 中文乱码,

中文还是用ZHS16GBK

insert into tt(id,name) values('2','张三');

plsql 中文乱码

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 中文乱码

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;