1.查看字符集
select * from nls_database_parameters;
2.查看数据库按什么长度算
show parameter nls_length_semantics;
3.查看数据显示的编码
select id,dump(name,1016) from t2;
SQL> select * from t2;
ID NAME
--------------------- --------------------
123456789012345678901 李四
SQL> select id,dump(name,1016) from t2;
ID DUMP(NAME,1016)
--------------------- --------------------------------------------------------------------------------
123456789012345678901 Typ=1 Len=4 CharacterSet=ZHS16GBK: c0,ee,cb,c4
4.设置环境变量
set nls_lang=语言种类_地区_字符集
例如:set nls_language=French_France.UTF8
5. 相关视图
nls_session_parameters
v$nls_valid_values
nls_instance_parameters
nls_database_parameters
v$nls_parameters
6.排序
select * from t order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M')
7.修改服务器编码
lsnrctl stop
sqlplus /as sysdba
update props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET';
update props$ set value$='AL16UTF16' where name='NLS_NCHAR_CHARACTERSET';
commit;
shutdown immediate;
startup mount;
alter system enable restricted session;
alter system set job_queue_processes=0;
alter database open;
alter database character set ZHS16GBK;
shutdown immediate;
startup mount;
alter system set job_queue_processes=1000;
alter database open;
exit;
lsnrctl start
sqlplus /nolog
conn /as sysdba
startup
conn sys/sys as sysdba
查看客户端编码
select * from V$NLS_PARAMETERS where parameter = 'NLS_CHARACTERSET' ;
6.字符集的区分
1.nls_language是服务器端的属性,显示服务器语言种类
2.nls_lang是客户端的属性,显示客户端语言种类,同Windows下注册表的nls_lang,
oracle客户端也取所在本地环境的nls_lang
3.服务器端字符集
select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。
4.客户端字符集
select * from nls_instance_parameters,来源于v$parameter
5.会话字符集环境
select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己 的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将nls_instance_parameters一致。
客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。
通过alter database来修改字符集,但也只限于子集到超集
Startup nomount;
Alter database mount exclusive;
Alter system enable restricted session;
Alter system set job_queue_process=0;
Alter database open;
Alter database character set zhs16gbk;