-
一般來說 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變量,填寫的值同上
-