安装oracle 10g 数据库后, 在pl/sql 或再sql/plus 中输入中文字符,出现 ?

  1. 现象: 

SQL> insert into emp(emp.empno,emp.ename,emp.job,emp.mgr,emp.hiredate,emp.sal,emp.comm,emp.deptno) values (3,'你好','靠你妹',2,to_date('1888/01/01','yyyy/mm/dd'),288.9,22.0,20);

 

1 row inserted

得到的结果:

3 ????       ??????        2 1888/1/1       288.90     22.00     20

 

  1. 原因: 因为在 oracle 数据库的服务器端与我现在使用的客户端(pl/sql,sqlplus) 的字符集不相同

  2. 解决:

scott 用户登录 oracle 的服务器端。 输入:

SQL> select userenv('language') from dual;

 

USERENV('LANGUAGE')

----------------------------------------------------

AMERICAN_AMERICA.ZHS16GBK

得到现在 服务器端使用的字符集

 

 

配置 win8的环境变量, 再环境变量中增加。 NLS_LANG = AMERICAN_AMERICA.ZHS16GBK或者 NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK

重启 sqlplus . 再进行验证即可

 

  1. 结果

SQL> insert into emp(emp.empno,emp.ename,emp.job,emp.mgr,emp.hiredate,emp.sal,emp.comm,emp.deptno) values (4,'你好','靠你妹',2,to_date('1888/01/01','yyyy/mm/dd'),288.9,22.0,20);

 

1 row inserted

 

SQL> commit ;

 

Commit complete

 

SQL> select * from emp where emp.empno = 4 ;

 

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

    4 你好       靠你妹        2 1888/1/1       288.90     22.00     20

 

SQL>

自此中文乱码问题解决。

  1. 另外网上有人提出,修改注册表中的值即可,那么在注册表中设置的环境变量,与再环境变量中设置的变量有什么区别和联系呢?  

即:再启动框中输入  regedit . 弹出注册表。 找到 oracle   NLS_LANG 的值, 修改成相对应的值即可。

 

  1. 还有一个 sql语句是这样的:  V$NLS_PARAMETERS 代表了什么? sql语句与select userenv('language') from dual; 有什么区别?

 

SQL> select * from V$NLS_PARAMETERS ;

你可能感兴趣的:(oracle,?,中文乱码)