服务器字符集:
select name,value$ from props$ where name= 'NLS_CHARACTERSET';
客户端字符集:
select userenv('LANGUAGE'),userenv('LANG') from dual;
如何查询dmp文件的字符集
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
select nls_charset_name(to_number('0354','xxxx')) from dual
查询oracle client端的字符集
select * from nls_instance_parameters;
这个比较简单。在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,比如:
set nls_lang=AMERICAN_AMERICA.ZHS16GBK
这样就只影响这个窗口里面的环境变量。
在unix平台下,就是环境变量NLS_LANG。
$echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK
导入导出数据时,需要保证3者相同字符集
所有oracle支持字符集名称
select value from V$NLS_VALID_VALUES where parameter='CHARACTERSET' order by value;
Oracle修改字符集:
connect system as sysdba ;
shutdown immediate ;
startup mount ;
alter system enable restricted session ;
alter system set JOB_QUEUE_PROCESSES=0;
alter system set AQ_TM_PROCESSES=0;
alter database open ;
alter database character set internal_use ZHS16GBK ;
shutdown immediate ;
startup ;
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
oracle 存储过程不能调试 权限不够
GRANT debug any procedure, debug connect session TO 用户;