字符語言環(huán)境
 
Session級、OS環(huán)境變量:基于Client端的字符設置
Database級:Database在存儲數(shù)據(jù)時的字符集(character set \national character set)
 
1.選擇數(shù)據(jù)庫的字符集模式
(1)單字節(jié)的字符集: 7-bit(128個符號)ASCII碼、8-bit(256個符號)擴展ASCII碼
可變寬度多字節(jié)字符集(1~3個字節(jié)之間:utf-8)、固定寬度多字節(jié)字符集 Unicode(AL32UFT8,AL16UTF16)
Database 字符集>依賴于OS字符集
(2)國際National字符集>Default(AL16UFT16)
sql>select parameter ,value frm nls_database_parmaeters  //NLS_NCHAR_CHARACTERSET :AL16UFT16
 
選擇Oracle國際字符集的方法:空間重要還是性能重要?
AL16UTF16 性能方面重要、UTF8 空間重要。
選擇Unicode 數(shù)據(jù)類型:假定支持多語言;包應用;性能(單字節(jié)數(shù)據(jù)庫字符集使用固定長度國際字符集);使用windows客戶端可以更好的支持UTF-16
 
2.基于語言的行為:使用初始化參數(shù)、環(huán)境變量和ALTER SESSION命令
(優(yōu)先級:初始化參數(shù)>環(huán)境變量>ALTER SESSION)
環(huán)境變量:nls_date_fomat、nls_date_language、nls_sort、nls_numeric_characters、nls_currency、nls_iso_currency、nls_calendar
sql>alter session set nls_language='SIMPLIFIED CHINESE'; //簡體中文
sql>select * from kong.authors; //命令執(zhí)行后變成了中文
cmd: set nls_lang=AMERICAN_AMERICA.US7ASCII  //設定環(huán)境變量(語言_區(qū)域.字符集)
     set nls_date_format='YYYY.MM.DD'  //設定環(huán)境變量(日期格式)
     SQLPLUSW /NOLOG
sql>conn sys/admin1 as sysdba
sql>set wrap off
sql>set linesize 200
sql>select parameter,value from nls_instance_parameters;
sql>select * from nls_session_parameters;
sql>alter session set nls_language='SIMPLIFIED CHINESE'; //語言發(fā)生改變(nls_date_language、nls_sort)
sql>select * from nls_session_parameters;
sql>alter session set nls_territory=CHINA; //區(qū)域值發(fā)生改變(nls_currency、nls_iso_currency、nls_date_format、nls_numberic_characters)
sql>select * from nls_session_parameters;  //使得貨幣符號、時間格式也相應隨著區(qū)域的不同而改變
sql>alter session set nls_currency='$';
sql>select * from nls_session_parameters;   //可以將貨幣符號“RMB”用“$”符號來覆蓋
sql>select sysdate from dual; //系統(tǒng)日期格式 29-4?  -2011
sql>alter session set nls_date_format='YYYY.MM.DD';
sql>select sysdate from dual; //2011.4.29
3.語言依賴性的應用程序對系統(tǒng)的影響
sql>execute DBMS_SESSION.set_nls('NLS_DATE_FORMAT','"YYYY.MM.DD"');
sql>alter session set nls_date_format='YYYY.MM.DD';
 
4.NLS sort的支持
sql>alter session set nls_sort='BINARY'; //session級別支持二進制排序,nlssort支持查詢語句的排序
 
5.在SQL語句中使用NLS參數(shù):
SELECT  to_char(hire_date,'DD.Mon.YYYY','NLS_DATE_LANGUAGE=FRENCH') FROM employee;
SELECT ename,to_char(sal,'9G999D99','NLS_NUMERIC_CHARACTERS=",."') FROM emp;
sql>select to_char(sysdate,'YYYY.MM.DD','NLS_DATE_LANGUAGE=CHINESE"') FROM DUAL;
 
6.索引的支持
CREATE INDEX list_word ON list(list(NLSSORT(word,'NLS_SORT=French_M')));
sql>create index TESTNLSINDEX on kong.authors(nlssort(au_lname,'NLS_SORT=French_M'))
 
7.獲取NLS database參數(shù)信息
NLS_DATABASE_PARAMETERS:
PARAMETER(nls_characterset,nls_nchar_characterset)
sql> select parameter,value from nls_database_parameters where parameter like '%CHARACTER%';
 // NLS_NUMERIC_CHARACTERS =.,  NLS_CHARACTERSET=ZHS16GBK  NLS_NCHAR_CHARACTERSET=AL16UTF16
sql>select parameter,value from nls_instance_parameters;
sql>select parameter,value from nls_session_parameters;
 
8.獲取NLS設置的信息:
V$NLS_VALID_VALUES(Language,sort,territory,characterset)
V$NLS_PARAMETERS(PARAMETER(NLS session parameters,NLS_CHARACTERSET))
sql>select * from v$nls_valid_values;
sql>select parameter,value from v$nls_parameters;