-
一般来说 Oracle 数据库乱码有以下原因
- 服务端设置的字符集不支持中文
- 客户端设置的字符集不支持中文
- 服务端与客户端设置的字符集不一致
-
解决方案
-
查找当前服务端的字符集
-- 重点查看NLS_LANGUAGE/NLS_TERRITORY两项数据,修改为 -- NLS_LANGUAGE=SIMPLIFIED CHINESE -- NLS_TERRITORY=CHINA SELECT * FROM NLS_DATABASE_PARAMETERS;
-
在 sysdba 的角色下执行以下指令
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM JOB_QUEUE_PROCESSES=0; ALTER SYSTEM SET AQ_TM_PROCESSES=0; ALTER DATABASE OPEN; ALTER DATABASE CHARACTER SET ZHS16GBK; -- 如果上面设置报错,使用下面这条指令 ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; SHUTDOWN IMMEDIATE; STARTUP;
-
查找当前客户端的字符集设置
-- 重点查看NLS_LANGUAGE/NLS_TERRITORY两项数据,修改为 -- NLS_LANGUAGE=SIMPLIFIED CHINESE -- NLS_TERRITORY=CHINA SELECT * FROM NLS_INSTANCE_PARAMETERS;
-
打开注册表,输入regedit,找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home的NLS_LANG键,使用如下命令将查询出的值填入
-- SIMPLIFIED CHINESE_CHINA.ZHS16GBK SELECT USERENV('LANGUAGE') FROM DUAL;
-
设置环境变量,在系统变量中添加NLS_LANG变量,填写的值同上
-