再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
时间: 2024-09-28 13:36:59