一、 查看字符集
1. 查看DB Server字符集
select * from nls_database_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
2. 查看客戶端字符集
可以看到基本都是通過操作系統命令在查,原因是 only the client knows their character set as well -- it is not available "in the database"
#On UNIX:
SQL> HOST ECHO $NLS_LANG
#On Windows(環境變量設置)
SQL> HOST ECHO %NLS_LANG%
#On Windows(注冊表設置)
SQL> @.[%NLS_LANG%].
#或者(只能查到字符集,沒有國家和區域信息)
SELECT * FROM NLS_SESSION_PARAMETERS;
二、 修改字符集
1. 修改DB Server字符集
shutdown immediate;
startup mount;
--限制session
alter system enable restricted session;
--查詢相關參數并修改(防止有任務自動啟動執行,一般不做也沒關系)
show parameter job_queue_processes; -- 記下這個值
show parameter aq_tm_processes; -- 記下這個值
alter system set job_queue_processes=0;
alter system set aq_tm_processes=0;
Alter database open;
-- 按需修改nls_characterset,其中INTERNAL_USE表示跳過字符集檢查
alter database character set internal_use AL32UTF8;
-- 按需修改nls_nchar_characterset
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
-- 查看修改后字符集
select * from nls_database_parameters;
shutdown immediate;
startup mount;
--將相關參數改回原來的值
alter system set job_queue_processes=xxx;
alter system set aq_tm_processes=xxx;
Alter database open;
2. 修改客戶端字符集(NLS_LANG)
關于NLS_LANG參數的解釋:
NLS_LANG = NLS_LANGUAGE_NLS_TERRITORY.NLS_CHARACTERSET
eg: export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
- NLS_LANGUAGE:指定服務器消息的語言, 影響提示信息是中文還是英文
- NLS_TERRITORY:指定服務器的日期和數字格式
- NLS_CHARACTERSET:指定字符集。
Windows與Linux通用改法
ALTER SESSION SET NLS_LANGUAGE=AMERICAN; -- 視服務器端字符集設置情況修改
Windows改法
當前會話生效
進入cmd
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8
set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
永久生效
將windows環境變量NLS_LANG值設置為SIMPLIFIED CHINESE_CHINA.AL32UTF8
Unix/Linux改法
查看方法
su - oracle
env | grep NLS_LANG
修改方法
使用export命令設置該環境變量,或直接加進~/.bash_profile里
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
參考
NLS_LANG Explained (How does Client-Server Character Conversion Work?) (文檔 ID 158577.1)
[轉載]Oracle Character set – Everything a New oracle DBA needs to know - FangwenYu - 博客園
Determine Oracle session client character set? - Database Administrators Stack Exchange
|