一、 查看字符集
1. 查看DB Server字符集
select * from nls_database_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
2. 查看客戶端字符集
可以看到基本都是通過操作系統(tǒng)命令在查,原因是 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(環(huán)境變量設(shè)置)
SQL> HOST ECHO %NLS_LANG%
#On Windows(注冊表設(shè)置)
SQL> @.[%NLS_LANG%].
#或者(只能查到字符集,沒有國家和區(qū)域信息)
SELECT * FROM NLS_SESSION_PARAMETERS;
二、 修改字符集
1. 修改DB Server字符集
shutdown immediate;
startup mount;
--限制session
alter system enable restricted session;
--查詢相關(guān)參數(shù)并修改(防止有任務(wù)自動(dòng)啟動(dòng)執(zhí)行,一般不做也沒關(guān)系)
show parameter job_queue_processes; -- 記下這個(gè)值
show parameter aq_tm_processes; -- 記下這個(gè)值
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;
--將相關(guān)參數(shù)改回原來的值
alter system set job_queue_processes=xxx;
alter system set aq_tm_processes=xxx;
Alter database open;
2. 修改客戶端字符集(NLS_LANG)
關(guān)于NLS_LANG參數(shù)的解釋:
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:指定服務(wù)器消息的語言, 影響提示信息是中文還是英文
- NLS_TERRITORY:指定服務(wù)器的日期和數(shù)字格式
- NLS_CHARACTERSET:指定字符集。
Windows與Linux通用改法
ALTER SESSION SET NLS_LANGUAGE=AMERICAN; -- 視服務(wù)器端字符集設(shè)置情況修改
Windows改法
當(dāng)前會(huì)話生效
進(jìn)入cmd
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8
set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
永久生效
將windows環(huán)境變量NLS_LANG值設(shè)置為SIMPLIFIED CHINESE_CHINA.AL32UTF8
Unix/Linux改法
查看方法
su - oracle
env | grep NLS_LANG
修改方法
使用export命令設(shè)置該環(huán)境變量,或直接加進(jìn)~/.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)
[轉(zhuǎn)載]Oracle Character set – Everything a New oracle DBA needs to know - FangwenYu - 博客園
Determine Oracle session client character set? - Database Administrators Stack Exchange
|