ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 全球化支持

全球化支持

原创 Linux操作系统 作者:yuecaibo 时间:2012-03-06 00:11:10 0 删除 编辑

 

全球化支持
 让数据库适应不同地区的人的需求
 需求包括
  字符集
  排序
  日期时间格式
  货币符号
  等等

为了让系统有更好的适用性 采用了数据库字符集和国家字符集
数据库字符集  国家字符集
varchar2 nvarchar2

unicode 效率差
比如一个AU16字符集的8K块放150行数据 使用unicode可能只放100行 这样读数据的效率下降了

比如一个姓名是中文 另一列是其他语言时 都采用同一个数据库字符集 存储上就不够合理
N 就可以很好的解决这些问题 将一个表中某列的数据类型定义成基本的 另一列为N的


NLS 国家语言支持
SQL> show parameter nls 

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
nls_calendar        string
nls_comp        string
nls_currency        string
nls_date_format        string
nls_date_language       string
nls_dual_currency       string
nls_iso_currency       string
nls_language        string  AMERICAN  语言
nls_length_semantics       string  BYTE
nls_nchar_conv_excp       string  FALSE
nls_numeric_characters       string
nls_sort        string
nls_territory        string  AMERICA   地区 影响时区,货币符号,日期格式,排序格式等
nls_time_format        string
nls_time_tz_format       string
nls_timestamp_format       string
nls_timestamp_tz_format       string
SQL>

nls_language 和 nls_territory的值设置最重要
 其他参数受这两个参数影响都会有默认值

可以在参数级,客户端环境变量级,会话级,sql函数级

设置的优先级别
 低端 参数级==> 客户端环境变量级 ==> 会话级 ==> sql函数级 高端

数据库级的设置 在安装数据时设置 设置后不要再更改
参数级
SQL> select * from nls_database_parameters;

PARAMETER         VALUE
------------------------------ ------------------------------
NLS_LANGUAGE         AMERICAN
NLS_TERRITORY         AMERICA
NLS_CURRENCY         $
NLS_ISO_CURRENCY        AMERICA
NLS_NUMERIC_CHARACTERS        .,
NLS_CHARACTERSET        AL32UTF8
NLS_CALENDAR         GREGORIAN
NLS_DATE_FORMAT         DD-MON-RR
NLS_DATE_LANGUAGE        AMERICAN
NLS_SORT         BINARY
NLS_TIME_FORMAT         HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT        DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT        HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY        $
NLS_COMP         BINARY
NLS_LENGTH_SEMANTICS        BYTE
NLS_NCHAR_CONV_EXCP        FALSE
NLS_NCHAR_CHARACTERSET        AL16UTF16
NLS_RDBMS_VERSION        10.2.0.1.0

20 rows selected.

SQL>


客户端环境变量级
 设置后 登录服务器时 就会覆盖服务器内的值
vim .bash_profile
 NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
 NLS_LANG=AMERICAN_AMERICA.AL32UTF8
:wq

SQL> select to_char(sal,'L999,999.00') from scott.emp where deptno=10;

TO_CHAR(SAL,'L999,999
---------------------
     $2,460.00
     $5,010.00
     $1,310.00

SQL>
vim .bash_profile
 NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
 NLS_LANG=AMERICAN_CHINA.AL32UTF8
:wq

SQL> select to_char(sal,'L999,999.00') from scott.emp where deptno=10;

TO_CHAR(SAL,'L999,999
---------------------
          ¥2,460.00
          ¥5,010.00
          ¥1,310.00

SQL>

vim .bash_profile
 NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
 NLS_LANG="SIMPLIFIED CHINESE"_CHINA.AL32UTF8
:wq
SQL> select sysdate from dual;

SYSDATE
-------------------
2011-04-03 23:52:47

SQL> alter session set nls_date_format='dd-mon-rr';

会话已更改。

SQL> select sysdate from dual;

SYSDATE
--------------
03-4月 -11

SQL>

客户端字符集设置和数据库存储的字符集不一致 会导致显示乱码
SQL> drop table t1 purge;

表已删除。

SQL> create table t1 (x char(20));

表已创建。

SQL> insert into t1 values('你好');

已创建 1 行。

SQL> select * from t1;

X
--------------------
你好

SQL> select dump(x) from t1;

DUMP(X)
----------------------------------------------------------------------------------------------------
Typ=96 Len=20: 228,189,160,229,165,189,32,32,32,32,32,32,32,32,32,32,32,32,32,32

SQL> exit

[oracle@dba ~]$ export NLS_LANG=AMERICAN_AMERICA.US7ASCII

SQL> conn / as sysdba
Connected.
SQL> select * from t1;

X
--------------------
??

SQL>


会话级别设置
 只保持在当前会话有效 比客户端级别高
SQL> select sysdate from dual;

SYSDATE
-------------------
2011-04-03 22:53:46

SQL> alter session set nls_date_format='dd-mon-rr';

Session altered.

SQL> select sysdate from dual;

SYSDATE
------------------
03-apr-11

SQL>


sql转换函数语句级

SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;

TO_CHAR(SY
----------
2011-04-03

SQL>

 

 

字符集的排序影响
 排序的三种类型
  binary sorting
  monolingual linguistic sorting
  multiling

 

SQL> show parameter nls_sort

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
nls_sort        string
SQL> select * from nls_database_parameters where parameter = 'NLS_SORT';

PARAMETER         VALUE
------------------------------ ------------------------------
NLS_SORT         BINARY

SQL> show parameter nls_sort

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
nls_sort        string
SQL>

 


1、使用拼音排序
  select * from t order by nlssort(field,'NLS_SORT=SCHINESE_PINYIN_M');
2、使用笔画排序
  select * from t order by nlssort(field,'NLS_SORT=SCHINESE_STROKE_M');
3、使用偏旁部首排序
  select * from t order by nlssort(field,'NLS_SORT=SCHINESE_RADICAL_M');

创建索引时指定排序方法
create index list_word on list(NLSSORT(WORD,'NLS_SORT='))

 

SQL> SHOW PARAMETER NLS_SORT

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
nls_sort        string
SQL> select value from nls_database_parameters where parameter='NLS_SORT';

VALUE
-----------------------------------
BINARY

SQL> select value from nls_session_parameters where parameter='NLS_SORT';

VALUE
-----------------------------------
BINARY

SQL>
可以使用 alter system ; alter session修改


可以使用语句级排序
SQL> select * from t11 order by v;

V
----------



SQL> select * from t11 order by nlssort(v,'NLS_SORT=SCHINESE_PINYIN_M');

V
----------



SQL> select * from t11 order by nlssort(v,'NLS_SORT=SCHINESE_STROKE_M');

V
----------



SQL> select * from t11 order by nlssort(v,'NLS_SORT=SCHINESE_radical_M');

V
----------



数据泵导入导出时 不需要关系字符集问题 因为导出文件是本地的
传统导入导出文件 要关注字符集问题 因为导出到客户端


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24756465/viewspace-717791/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 安全
请登录后发表评论 登录
全部评论

注册时间:2012-03-03

  • 博文量
    42
  • 访问量
    37660