一个同事使用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'
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)
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'
SET VALUE$ = 'JA16SJIS'
WHERE NAME = 'NLS_CHARACTERSET'
SELECT CHARSETID FROM SYS.COL$
WHERE CHARSETFORM=1
UPDATE SYS.COL$
SET CHARSETID=832
WHERE CHARSETFORM=1
SET CHARSETID=832
WHERE CHARSETFORM=1
UPDATE SYS.ARGUMENT$
SET CHARSETID=832
WHERE CHARSETFORM=1
SET CHARSETID=832
WHERE CHARSETFORM=1
UPDATE SYS.COLLECTION$
SET CHARSETID=832
WHERE CHARSETFORM=1
SET CHARSETID=832
WHERE CHARSETFORM=1
UPDATE SYS.PARAMETER$
SET CHARSETID=832
WHERE CHARSETFORM=1
SET CHARSETID=832
WHERE CHARSETFORM=1
UPDATE SYS.RESULT$
SET CHARSETID=832
WHERE CHARSETFORM=1
SET CHARSETID=832
WHERE CHARSETFORM=1