解决windows下oracle字符显示乱码问题

时间:2022-08-31 05:04:57
解决windows下oracle字符显示乱码问题


1.修改DOS字符集:



修改DOS字符集,可以防止DBCA,NETCA这些软件在运行时报错,在注册表修改
HKEY_CURRENT_USER/Console/%SystemRoot%_system32_cmd.exe 


再双击右边CodePage选项将数值将fde9改为十六进制3a8或十进制"936 
十六进制"000003a8"或十进制"936",表示“936 (ANSI/OEM - 简体中文 GBK)”
十六进制"000001b5"或十进制"437",表示“437 (OEM - 美国)”。


2.修改服务器端Language和Territory值:



因为DML的脚本是以中文格式做插入的,脚本不能动,所以需要修改服务器端,不然会报 ORA-01843.


查看:
SQL> select tab1.aa||'_'||tab2.bb||'.'||tab3.cc from
  2  (select VALUE$ aa from sys.props$ where name='NLS_LANGUAGE')tab1,
  3  (select VALUE$ bb from sys.props$ where name='NLS_ISO_CURRENCY')tab2,
  4  (select VALUE$ cc from sys.props$ where name='NLS_CHARACTERSET')tab3;


TAB1.AA||'_'||TAB2.BB||'.'||TAB3.CC
-----------------------------------------------------------------------------


AMERICAN_AMERICA.ZHS16GBK


修改:


UPDATE sys.PROPS$ SET VALUE$='SIMPLIFIED CHINESE'  where name='NLS_LANGUAGE';
UPDATE sys.PROPS$ SET VALUE$='CHINA'  where name='NLS_ISO_CURRENCY';


再次查看:
SQL> select tab1.aa||'_'||tab2.bb||'.'||tab3.cc from
  2  (select VALUE$ aa from sys.props$ where name='NLS_LANGUAGE')tab1,
  3  (select VALUE$ bb from sys.props$ where name='NLS_ISO_CURRENCY')tab2,
  4  (select VALUE$ cc from sys.props$ where name='NLS_CHARACTERSET')tab3;


TAB1.AA||'_'||TAB2.BB||'.'||TAB3.CC
-------------------------------------------------------------------------------


SIMPLIFIED CHINESE_CHINA.ZHS16GBK




3.修改NLS_LANG



注册表修改或临时设环境变量。


注册表:报到KEY_OraDb11g_home1
修改NLS_LANG的值 :SIMPLIFIED CHINESE_CHINA.ZHS16GBK






注:关于NLS_LANG的说明:

(下面来自网络,地址忘了)
影响Oracle数据库字符集最重要的参数是NLS_LANG参数。
它的格式如下: NLS_LANG = language_territory.charset
它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。
其中:
Language: 指定服务器消息的语言, 影响提示信息是中文还是英文
Territory: 指定服务器的日期和数字格式,
Charset:  指定字符集。
如:AMERICAN _ AMERICA. ZHS16GBK
从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。