rdbms 11.2.0.4
昨天運維提出了一個問題,在securecrt上執行一個查詢的時候返回0,但是在plsql developer上查詢的時候,返回是有值的。
這個語句中有個條件,where status in ('漢字1','漢字2','漢字3'); 懷疑是字符集的問題,導致傳送到服務器上的時候是亂碼,按照這寫亂碼進行條件查詢,當然查詢不到了。
在其他的客戶端查詢也是這個問題。
查詢數據庫的字符集。通過視圖v$nls_parameters查詢出NLS_DATE_LANGUAGE是SIMPLIFIED CHINESE,NLS_CHARACTERSET是AL32UTF8。
在操作系統上設置變量
在操作系統上設置NLS_LANG爲SIMPLIFIED CHINESE.AL32UTF8
[oracle@Oralinux1 ~]$ export NLS_LANG="SIMPLIFIED CHINESE.AL32UTF8"
[oracle@Oralinux1 ~]$ env | grep NLS_LANG
NLS_LANG=SIMPLIFIED CHINESE.AL32UTF8
[oracle@Oralinux1 ~]$
登錄sqlplus 再次查看結果(之前查詢所有的漢字顯示都是問號或亂碼)
[oracle@Oralinux1 ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.4.0 Production on 星期三 9月 18 01:26:56 2019
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> conn xxxx/xxxxx
Connected.
SQL> select id,name from sys_using_info;
ID NAME
---------- --------------------
111 你好
112 你壞
113
117 弄不好
118 你不壞
119 滾蛋
121 哈哈
123 呵呵
109 噼裏啪啦
110 哦哦
115 按按
ID NAME
---------- --------------------
116 各個
114 的的
120 開機啊
122 局阿凡達
15 rows selected.
SQL>
通過以上的設置後,在使用 之前的where條件進行查詢,返回值了。
END