熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle中的中文排序方式

2013-11-13 16:00:38  來源: Oracle 

   測試中文排序的數據庫版本

  SQL> select * from v$version;

  BANNER

  

  Oracle Database g Enterprise Edition Release Production

  PL/SQL Release Production

  CORE          Production

  TNS for Linux: Version Production

  NLSRTL Version Production

   創建測試表

  create table player (id number( ) name varchar());

   檢查字符集配置

  確認數據庫字符集 american_americaALUTF

  SQL>  select  namevalue$  from  props$;

  NAME                           VALUE$

  

  DICTBASE                     

  DEFAULT_TEMP_TABLESPACE        TEMP

  DEFAULT_PERMANENT_TABLESPACE   USERS

  DEFAULT_EDITION                ORA$BASE

  Flashback Timestamp TimeZone   GMT

  TDE_MASTER_KEY_ID

  DEFAULT_TBS_TYPE               SMALLFILE

  NLS_LANGUAGE                   AMERICAN

  NLS_TERRITORY                  AMERICA

  NLS_CURRENCY                   $

  NLS_ISO_CURRENCY               AMERICA

  NLS_NUMERIC_CHARACTERS        

  NLS_CHARACTERSET               ALUTF

  NLS_CALENDAR                   GREGORIAN

  NLS_DATE_FORMAT                DDMONRR

  NLS_DATE_LANGUAGE              AMERICAN

  NLS_SORT                       BINARY

  NLS_TIME_FORMAT                HHMISSXFF AM

  NLS_TIMESTAMP_FORMAT           DDMONRR HHMISSXFF AM

  NLS_TIME_TZ_FORMAT             HHMISSXFF AM TZR

  NLS_TIMESTAMP_TZ_FORMAT        DDMONRR HHMISSXFF AM TZR

  NLS_DUAL_CURRENCY              $

  NLS_COMP                       BINARY

  NLS_LENGTH_SEMANTICS           BYTE

  NLS_NCHAR_CONV_EXCP            FALSE

  NLS_NCHAR_CHARACTERSET         ALUTF

  NLS_RDBMS_VERSION             

  GLOBAL_DB_NAME                 ORAG

  EXPORT_VIEWS_VERSION          

  WORKLOAD_CAPTURE_MODE

  WORKLOAD_REPLAY_MODE

  DBTIMEZONE                     :

   rows selected

  SQL>

  深入確認字符集

  SELECT DISTINCT (NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET

  DECODE(TYPE#

  DECODE(CHARSETFORM VARCHAR NVARCHAR UNKOWN)

  

  DECODE(CHARSETFORM VARCHAR NCHAR VARYING UNKOWN)

  

  DECODE(CHARSETFORM CHAR NCHAR UNKOWN)

  

  DECODE(CHARSETFORM CLOB NCLOB UNKOWN)) TYPES_USED_IN

  FROM SYSCOL$

  WHERE CHARSETFORM IN ( )

  AND TYPE# IN ( );

  確認操作系統字符集設置

  [orag@bj ~]$ export NLS_LANG=american_americaalutf

   填寫測試數據

  

  SQL> insert into player values ( 下午啦);

   row created

  SQL> insert into player values ( 八千米死亡線);

  SQL> set pagesize

  SQL>  select * from player;

  ID NAME

   中文

   中文拼音

   筆畫輸入法

  

  

  

  

  

  

  

  

  

  

  

   測試啊

   下午啦

   八千米死亡線

   rows selected

  SQL>

    開始測試發現三個查詢語句返回的結果一致

  SQL> select * from player order by    nlssort(nameNLS_SORT=SCHINESE_RADICAL_M);

  ID NAME

  

  

  

  

  

  

  

  

   筆畫輸入法

  

  

  

  

   中文

   下午啦

   中文拼音

   測試啊

   八千米死亡線

   rows selected

  SQL> select * from player order by nlssort(nameNLS_SORT=SCHINESE_STROKE_M);

  ID NAME

  

  

  

  

  

  

  

  

   筆畫輸入法

  

  

  

  

   中文

   下午啦

   中文拼音

   測試啊

   八千米死亡線

   rows selected

  SQL> select * from player order by nlssort(nameNLS_SORT=SCHINESE_PINYIN_M);

  ID NAME

  

  

  

  

  

  

  

  

   筆畫輸入法

  

  

  

  

   中文

   下午啦

   中文拼音

   測試啊

   八千米死亡線

   rows selected

  囧疑似碰上bug切換到gR下看看

  SQL> select * from v$version;

  BANNER

  

  Oracle Database g Enterprise Edition Release Prod

  PL/SQL Release Production

  CORE        Production

  TNS for Linux: Version Production

  NLSRTL Version Production

  SQL> select * from player order by nlssort(nameNLS_SORT=SCHINESE_PINYIN_M);

  ID NAME

  

  

   八千米死亡線

   筆畫輸入法

   測試啊

  

  

  

  

  

  

  

  

   下午啦

  

   中文

   中文拼音

   rows selected

  SQL> select * from player order by nlssort(nameNLS_SORT=SCHINESE_STROKE_M);

  ID NAME

  

  

  

  

  

  

  

   八千米死亡線

  

  

   下午啦

  

   中文

   中文拼音

  

  

   測試啊

   筆畫輸入法

   測試服務器

   rows selected

  SQL> select * from player order by nlssort(nameNLS_SORT=SCHINESE_RADICAL_M);

  ID NAME

  

  

  

  

  

   下午啦

  

   中文

   中文拼音

  

  

  

   八千米死亡線

  

  

  

   測試啊

   筆畫輸入法

   測試服務器

   rows selected

  SQL>

  這個結果似乎比較符合預期結果

  NLS_SORT=SCHINESE_RADICAL_M  按照部首排序

  NLS_SORT=SCHINESE_STROKE_M 按照筆畫排序

  NLS_SORT=SCHINESE_PINYIN_M 按照拼音排序


From:http://tw.wingwit.com/Article/program/Oracle/201311/17664.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.