一般Oracle亂碼都是因為客戶端使用的字符集和服務器不一致引起的:
網站建設哪家好,找創新互聯!專注于網頁設計、網站建設、微信開發、小程序開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了江北免費建站歡迎大家使用!
確認數據庫服務器所用字符集:
select * from nls_database_parameters where PARAMETER = 'NLS_CHARACTERSET'
設置客戶端的字符集:
在windows平臺下,就是注冊表里面相應OracleHome的NLS_LANG。
或者系統環境變量中的NLS_LANG
還可以在dos窗口里面自己設置,
比如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK
這樣就只影響這個窗口里面的環境變量。
在unix平臺下,就是環境變量NLS_LANG。
$echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK
1、首先,Oracle查詢編碼:select * from v$nls_parameters;//看看是否GBK
2、如果是用Servlet或者別的,插入數據之前輸出一下,看看是否亂碼。
比如:
doPost()
//設置接受編碼,但你的頁面也必須是UTF-8
response.setContentType("text/html;charset=UTF-8");
doGet()
//下面方式轉一下碼
String username = new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8");
一般來說,oracle數據導出spool方式,中文出現亂碼,這情況是因為數據庫服務器和客戶端字符集不匹配,執行sqlplus的機器就是客戶端,服務器和客戶端也可能是一臺機器,執行sqlplus之前要先設置客戶端的字符集,在linux上:export NLS_LANG=.......
在windows上set NLS_LANG查詢數據庫字符集:select property_value from database_properties where property_name like 'NLS_CHAR%';
1、比如查詢結果是:ZHS16GBK
那你在sqlplus之前要設置:export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
然后再登錄sqlplus用spool生成數據
檢查下你導出時候的環境變量,導入時的環境變量
2、比如導出時NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
導入時NLS_LANG沒有設置,或者設置為其他字符集,則導入的庫內漢字就有可能變成亂碼。
解決方法,連接數據庫的時候設置正確字符集即可。
oracle表的partition名亂碼查詢:
1、查看服務器端編碼
Select userenv('language') from dual;
我實際查到的結果為: AMERICAN_AMERICA.UTF8(每人查到的可能不一樣)
2、執行語句 select * from V$NLS_PARAMETERS
查看第一行中PARAMETER項中為NLS_LANGUAGE對應的VALUE項中是否和第一步得到的值一樣。
如果不是,需要設置環境變量。
3、設置環境變量
計算機--屬性-- 高級系統設置-- 環境變量 --系統環境變量--新建
設置變量名:NLS_LANG
變量值:第1步查到的值,AMERICAN_AMERICA.UTF8(以你第一步查到的為準)
在Redhat上安裝Oracle 10g沒有設定字符集,采用的是操作系統默認字符集:WE8ISO8859P1,將字符集修改為:ZHS16GBK。由于過程不可逆,首先需要備份數據庫。
1.數據庫全備
2.查詢當前字符集
SQL select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
PARAMETER ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VALUE
---------------------------------------- ----------------------------------------
NLS_CHARACTERSET ? ? ? ? ? ? ? ? ? ? ? ? WE8ISO8859P1
3.關閉數據庫
SQL shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
4.啟動數據庫到mount狀態
SQL startup mount
ORACLE instance started.
Total System Global Area ?205520896 bytes
Fixed Size ? ? ? ? ? ? ? ? ?1266608 bytes
Variable Size ? ? ? ? ? ? 100666448 bytes
Database Buffers ? ? ? ? ?100663296 bytes
Redo Buffers ? ? ? ? ? ? ? ?2924544 bytes
Database mounted.
5.限制session
SQL alter system enable restricted session;
System altered.
6.查詢相關參數并修改
SQL show parameter job_queue_processes;
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TYPE ? ? ? ?VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes ? ? ? ? ? ? ? ? ?integer ? ? 10
SQL show parameter aq_tm_processes;
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TYPE ? ? ? ?VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes ? ? ? ? ? ? ? ? ? ? ?integer ? ? 0
SQL alter system set job_queue_processes=0;
System altered.
7.打開數據庫
SQL alter database open;
Database altered.
8.修改字符集
SQL alter database character set ZHS16GBK;
alter database character set ZHS16GBK
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
出現錯誤提示,新字符集必須是老字符集的超集,也就原來字符集是新字符集的子集,可以再Oracle官方文檔上查詢字符集包含關系。下面使用Oracle內部命令internal_use,跳過超集檢查,生產環境不建議使用此方法。
SQL alter database character set internal_use ZHS16GBK; ? ? ? ?
Database altered.
9.查詢當前字符集
SQL select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
PARAMETER ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VALUE
---------------------------------------- ----------------------------------------
NLS_CHARACTERSET ? ? ? ? ? ? ? ? ? ? ? ? ZHS16GBK
10.關閉數據庫
SQL shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
11.啟動數據庫到mount狀態
SQL startup mount
ORACLE instance started.
Total System Global Area ?205520896 bytes
Fixed Size ? ? ? ? ? ? ? ? ?1266608 bytes
Variable Size ? ? ? ? ? ? 100666448 bytes
Database Buffers ? ? ? ? ?100663296 bytes
Redo Buffers ? ? ? ? ? ? ? ?2924544 bytes
Database mounted.
12.將相關參數改回原來值
SQL alter system set job_queue_processes=10;
System altered.
13.打開數據庫
SQL alter database open;
Database altered.
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
分享題目:oracle如何設置亂碼 oracle中文亂碼環境變量設置
本文鏈接:http://vcdvsql.cn/article38/hiodsp.html
成都網站建設公司_創新互聯,為您提供營銷型網站建設、ChatGPT、商城網站、App開發、面包屑導航、網站營銷
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯