现象:
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
原因: 因为在 oracle 数据库的服务器端与我现在使用的客户端(pl/sql,sqlplus) 的字符集不相同
解决:
用 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 . 再进行验证即可
结果
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>
自此中文乱码问题解决。
另外网上有人提出,修改注册表中的值即可,那么在注册表中设置的环境变量,与再环境变量中设置的变量有什么区别和联系呢?
即:再启动框中输入 regedit . 弹出注册表。 找到 oracle 的 NLS_LANG 的值, 修改成相对应的值即可。
还有一个 sql语句是这样的: 表 V$NLS_PARAMETERS 代表了什么? 该sql语句与select userenv('language') from dual; 有什么区别?
SQL> select * from V$NLS_PARAMETERS ;