現象: sql
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 服務器
獲得的結果: oracle
3 ???? ?????? 2 1888/1/1 288.90 22.00 20 spa
緣由: 由於在 oracle 數據庫的服務器端與我如今使用的客戶端(pl/sql,sqlplus) 的字符集不相同 orm
解決: it
用 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 ;