linuxoracle亂碼
『壹』 linux oracle sqlplus 中文顯示亂碼,求助!!
系統環境變數設置下NLS_LANG
『貳』 oracle sql developer的腳本出現亂碼
說明腳本的編碼格式和資料庫的編碼格式不一致,可以通過修改資料庫編碼格式的方式來實現:
;改完編碼後執行
sql>conn/assysdba;
sql>shutdownimmediate;
databaseclosed.
databasedismounted.
oracleinstanceshutdown.
sql>startupmount;
oracleinstancestarted.
fixedsize452044bytes
variablesize109051904bytes
databasebuffers25165824bytes
redobuffers667648bytes
databasemounted.
sql>;
systemaltered.
sql>altersystemsetjob_queue_processes=0;
systemaltered.
sql>altersystemsetaq_tm_processes=0;
systemaltered.
sql>alterdatabaseopen;
databasealtered.
sql>_useUTF-8;
sql>shutdownimmediate;
sql>startup;
查看資料庫編碼格式:select userenv('language') from al;
再就是如果資料庫格式不支持中文一般也會亂碼,也通過上面的方式解決,如果資料庫已經是支持中文的格式了,那麼就只能想辦法修改腳本格式了。
『叄』 oracle 亂碼 如何解決
1、對於Oracle Enterprise Manager中的所有工具,有一個配置文件名為dbappscfg.properties,修改該文件即可解決上述問題。這個文件的位置在$ORACLE_HOME\sysman\config目錄下,用任何的文本編輯器打開該文件,在這個文件裡面,找到這樣一項,
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
2、去掉注釋符#,同時將其修改為
SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
3、對於Windows操作系統,還需要修改一項,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注釋符,將其修改為你所在機器的操作系統主目錄。如操作系統的主目錄在D盤的Winnt下,則將其修改為
SQLPLUS_SYSTEMROOT=d:\\WINNT。
對於後面一項的修改只對Windows操作系統進行,對UNIX操作系統則不需要。如果在Windows操作系統中不修改該項,在Oracle Enterprise Manager中,連接系統時,會提示如下的錯誤:
ORA-12560 TNS:protocol adapter error
或者
ORA-12545 Connect failed because target host or object does not exist
4、修改完成後,保存文件,退出編輯。重新連接SQL PLUS Worksheet,字元集亂碼問題得到解決,顯示正確的簡體中文字元集。
問題: 使用Oracle Instant Client 出現 ORA-12705: Cannot access NLS data files or invalid environment specified 錯誤。
如果是Windows平台,注冊表裡 \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 查找鍵 NLS_LANG,這個鍵由Oracle標准客戶端安裝創建, 值是 NA 。這個導致了 ORA-12705錯誤。解決方法就是改名 NLS_LANG。
Linux下 如果環境變數 NLS_LANG 值是NA 會引起 ORA-12705 錯誤,解決方法是刪除這個變數
unset NLS_LANG
『肆』 sql server2005遠程連接oracle11g查詢結果中文亂碼,怎麼解決
遠程連接oracle11g查詢結果中文亂碼是客戶端和服務端編碼設置不同引起的。
1、檢查windows7下面cmd裡面sqlplus中oracle
server端的字元集。
打開cmd,用sqlplus登錄,輸入下面SQL查詢服務端的字元集。
2、去後台linux查看字元集編碼,
(1),查看profile文件
[oracle@powerlong4
~]$
vim/home/oracle/.bash_profile
export
LANG=en_US.gbk
export
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
(2),查看資料庫的userenv
SQL>
select
userenv('language')
fromal;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
改成ZHS16GBK就不會有中文亂碼了。
『伍』 Oracle數據出現中文亂碼怎麼解決
1. 伺服器指定字元集與客戶字元集不同,而與載入數據字元集一致。
解決方法:對於這種情況,只需要設置客戶端字元集與伺服器端字元集一致就可以了,具體操作如下:
* 查看當前字元集:
SQL> select * from sys.props$
2 WHERE NAME=『NLS_CHARACTERSET』;
NAME value$
NLS_CHARACTERSET ZHS16GBK
可以看出,現在伺服器端Oracle資料庫的字元集為『ZHS16GBK』
* 根據伺服器的字元集在客戶端作相應的配置或者安裝Oracle的客戶端軟體時指定:
如果還沒安裝客戶端,那麼在安裝客戶端時,指定與伺服器相吻合的字元集即可;如果已經安裝好了客戶端,並且客戶端為 sql*net 2.0 以下版本,進入Windows的系統目錄,編輯oracle.ini文件,用US7ASCII替換原字元集,重新啟動計算機,設置生效;否則,如果,客戶端為 sql*net 2.0 以上版本,在Win98 下 運 行REGEDIT,第一步選HKEY_LOCAL_MACHINE,第二步選擇SOFTWARE, 第三步選擇 Oracle, 第四步選擇 NLS_LANG, 鍵 入 與服 務 器 端 相 同 的 字 符 集
(本例為:HKEY_LOCAL_MACHINE/
SOFTWARE/ORACLE/NLS_LANG :AMERICAN _ AMERICA. ZHS16GBK)。
如果是UNIX客戶端,則:
SQL> conn / as sysdba
Connected.
SQL> SQL> UPDATE sys.PROPS$ SET value$=『SIMPLIFIED CHINESE』
2 WHERE NAME=『NLS_LANGUAGE』;
2. 伺服器指定字元集與客戶字元集相同,與載入數據字元集不一致。
解決方法:強制載入數據字元集與伺服器端字元集一致。要做到這一點,可以通過重新創建資料庫,並選擇與原卸出數據一致的字元集,然後IMP數據,這種情況僅僅適用於空庫和具有同一種字元集的數據。
解決這類問題,也可以先將數據載入到具有相同字元集的伺服器上,然後用轉換工具卸出為foxbase 格式或access格式資料庫,再用轉換工具轉入到不同字元集的Oracle資料庫中,這樣就避免了Oracle字元集的困擾。目前資料庫格式轉換的工具很多,像power builder5.0以上版本提供的pipeline及Microsoft Access資料庫提供的數據導入/導出功能等。
3. 伺服器指定字元集與客戶字元集不同,與輸入數據字元集不一致。
對於這種情況,目前為止都還沒有太好的解決方法。
通過上面的了解,我們知道,導致在後期使用資料庫時出現種種關於字元集的問題,多半是由於在資料庫設計、安裝之初沒有很好地考慮到以後的需要,所以,我們完全可以通過在伺服器上和客戶端使用相同的字元集來避免由此類問題引出的麻煩
怎樣修改查看Oracle字元集
a.資料庫伺服器字元集select * from nls_database_parameters,其來源於props$,是表示資料庫的字元集。
b.客戶端字元集環境select * from nls_instance_parameters,其來源於v$parameter,
表示客戶端的字元集的設置,可能是參數文件,環境變數或者是注冊表
c.會話字元集環境 select * from nls_session_parameters,其來源於v$nls_parameters,表示會話自己的設置,可能是會話的環境變數或者是alter session完成,如果會話沒有特殊的設置,將與nls_instance_parameters一致。
客戶端的字元集要求與伺服器一致,才能正確顯示資料庫的非Ascii字元。如果多個設置存在的時候,alter session>環境變數>注冊表>參數文件
實際情況
我用select * from nls_database_parameters
PARAMETER VALUE
------------------------------ ------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET ZHS16GBK
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
PARAMETER VALUE
------------------------------ ------------------------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 10.2.0.1.0
說明我在創建資料庫時指定的字元集是ZHS16GBK,我用
update sys.props$ set value$='AL32UTF8' where name='NLS_CHARACTERSET';
修改了字元集,但插入中文時仍然有問題,這或許就如上面資料所說的通過修改SYS.PROPS$來修改主要是對應客戶端的顯示,與存儲無關,
所以仍舊是亂碼。
然後我重新創建了個資料庫,指定字元集為AL32UTF8,插入中文就沒問題了。
可見我們如果要在資料庫中顯示中文,在創建資料庫時一定喲指定好所用的字元集。