再sqlplus中執行腳本sql語句,並使結果輸出到ouput文件 --關閉console台輸出,可以節省時間 set term off; --再輸出的文件中顯示執行的sql語句 set echo on; --顯示執行每條語句所用的時間 set timing on; --每行顯示的100個字符 set linesize 100; --查詢結果每一百條分一頁 set pagesize 100; --spool 設置輸出文件 spool d:\tempfile\oracle\output.txt; --執行input.txt里面的sql語句 @ d:\tempfile\oracle\input.txt; --把內容從緩存里面輸出到文件吧 spool off; 執行此操作遇到問題 在output.txt中出現亂碼 1.當把output.txt文件設置為gbk字符編碼時,發現input.txt里面的中文亂碼 2.當把output.txt文件設置為utf-8字符編碼時,describe emp;輸出語句里面的中文亂碼 最后把input.txt(原本是utf-8)文件字符編碼設置為gbk; 這里主要出現的問題是sqlplus客戶端字符編碼是gbk,輸出的內容為gbk編碼,如果把output.txt設置為utf-8則sqlplus客戶端穿過來的內容亂碼; 因為服務端和客戶端都是gbk編碼,所以input.txt的所有內容並不會出現字符集轉換,所以這里選擇把input.txt字符集換成和sqlplus客戶端字符集相同,並把output.txt設置為與sqlplus客戶端相同,就解決了亂碼。 原因可見oracle字符編碼的解決 一、查詢服務端字符集 select userenv('language') from dual; USERENV('LANGUAGE') ---------------------------------------------------- SIMPLIFIED CHINESE_CHINA.ZHS16GBK 二、 客戶端NLS_LANG參數(即sqlplus的參數)該參數用於向Oracle指示客戶端操作系統(sqlplus客戶端)的字符集。 select * from v$nls_parameters where parameter='NLS_CHARACTERSET'; PARAMETER VALUE ------------------------------ ------------------------------ NLS_CHARACTERSET ZHS16GBK 設置客戶端NLS_LANG C:\Users\85243>set nls_lang=Simplified Chinese_China.ZHS16GBK C:\Users\85243>set nls_lang=Simplified Chinese_China.AL32UTF8 三、客戶端操作系統字符集 C:\Users\85243>chcp 活動代碼頁: 936 936代表的是gbk編碼 65001代表的是utf-8