分享

Oracle学习笔记(16)字符语言环境

 忧郁_小刚 2011-05-20

字符语言环境

 

Session级、OS环境变量:基于Client端的字符设置
Database级:Database在存储数据时的字符集(character set \national character set)

 

1.选择数据库的字符集模式
(1)单字节的字符集: 7-bit(128个符号)ASCII码、8-bit(256个符号)扩展ASCII码
可变宽度多字节字符集(1~3个字节之间:utf-8)、固定宽度多字节字符集 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 数据类型:假定支持多语言;包应用;性能(单字节数据库字符集使用固定长度国际字符集);使用windows客户端可以更好的支持UTF-16

 

2.基于语言的行为:使用初始化参数、环境变量和ALTER SESSION命令

(优先级:初始化参数>环境变量>ALTER SESSION)
环境变量: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; //命令执行后变成了中文
cmd: set nls_lang=AMERICAN_AMERICA.US7ASCII  //设定环境变量(语言_区域.字符集)
     set nls_date_format='YYYY.MM.DD'  //设定环境变量(日期格式)
     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'; //语言发生改变(nls_date_language、nls_sort)
sql>select * from nls_session_parameters;

sql>alter session set nls_territory=CHINA; //区域值发生改变(nls_currency、nls_iso_currency、nls_date_format、nls_numberic_characters)
sql>select * from nls_session_parameters;  //使得货币符号、时间格式也相应随着区域的不同而改变

sql>alter session set nls_currency='$';
sql>select * from nls_session_parameters;   //可以将货币符号“RMB”用“$”符号来覆盖

sql>select sysdate from dual; //系统日期格式 29-4?  -2011
sql>alter session set nls_date_format='YYYY.MM.DD';
sql>select sysdate from dual; //2011.4.29


3.语言依赖性的应用程序对系统的影响
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参数:
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参数信息
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;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多