修改Oracle数据库中乱码问题

 一个同事使用Windows操作系统中文环境安装完10g以后,因为工作需要需要使用日文的操作系统。相应的数据库也应该是日文。这时候数据库中默认的为中文的字符集,因为安装数据库的时候默认的字符集是根据系统而来的。改过操作系统的语言设置以后,Oracle10g内部出现乱码。

 一般情况下这种的最好该一下注册表的字符集(1)。 然后重建一个日文字符集的数据库就可以解决问题。

假如是空数据库,那么可以通过(1,2)来实现。而不用重新创建数据库

解决办法

1. 修改注册表的字符集信息

在注册表的HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE里有三个需要修改

HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME

修改其下的NLS_LANG参数为JAPANESE_JAPAN.JA16SJIS
重新启动库,整个库就变成日文的了。

2.查看系统配置信息
SELECT * FROM sys.props$ 可以查看系统配置信息
 
可以更新系统信息
update   sys.props$   set   value$='JA16SJIS'   WHERE   name   =   'NLS_CHARACTERSET';   
update   sys.props$   set   value$='JA16SJIS'   WHERE   name   =   'NLS_CHARACTERSET' 
3.然后更新列信息
 
查询字符集的ID 和name
SELECT NLS_CHARSET_ID(VALUE) NLS_CHARSET_ID,VALUE NLS_CHARSET_NAME
FROM V$NLS_VALID_VALUES
WHERE PARAMETER = 'CHARACTERSET'
ORDER BY NLS_CHARSET_ID(VALUE)

865 ZHT16BIG5

832 JA16SJIS

然后更新 列等

UPDATE SYS.PROPS$
SET VALUE$ = 'JA16SJIS'
WHERE NAME = 'NLS_CHARACTERSET'

SELECT CHARSETID FROM SYS.COL$
WHERE CHARSETFORM=1
UPDATE SYS.COL$
SET CHARSETID=832
WHERE CHARSETFORM=1
UPDATE SYS.ARGUMENT$
SET CHARSETID=832
WHERE CHARSETFORM=1
UPDATE SYS.COLLECTION$
SET CHARSETID=832
WHERE CHARSETFORM=1
UPDATE SYS.PARAMETER$
SET CHARSETID=832
WHERE CHARSETFORM=1
UPDATE SYS.RESULT$
SET CHARSETID=832
WHERE CHARSETFORM=1

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值