知识大全 Oracle中的中文排序方式

Posted 中文

篇首语:知识为进步之母,而进步又为富强之源泉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle中的中文排序方式相关的知识,希望对你有一定的参考价值。

Oracle中的中文排序方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   测试中文排序的数据库版本

  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_america AL UTF

  SQL>  select  name value$  from  props$;

  NAME                           VALUE$

  

  DICT BASE                     

  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               AL UTF

  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_P                       BINARY

  NLS_LENGTH_SEMANTICS           BYTE

  NLS_NCHAR_CONV_EXCP            FALSE

  NLS_NCHAR_CHARACTERSET         AL UTF

  NLS_RDBMS_VERSION             

  GLOBAL_DB_NAME                 ORA G

  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 SYS COL$

  WHERE CHARSETFORM IN ( )

  AND TYPE# IN ( );

  确认操作系统字符集设置

  [ora g@bj ~]$ export NLS_LANG=american_america al utf

   填写测试数据

  

  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(name NLS_SORT=SCHINESE_RADICAL_M );

  ID NAME

  

   一

   十

   四

   七

   六

   五

   三

   笔画输入法

   八

   九

   八

   二

   中文

   下午啦

   中文拼音

   测试啊

   八千米死亡线

   rows selected

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

  ID NAME

  

   一

   十

   四

   七

   六

   五

   三

   笔画输入法

   八

   九

   八

   二

   中文

   下午啦

   中文拼音

   测试啊

   八千米死亡线

   rows selected

  SQL> select * from player order by nlssort(name NLS_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(name NLS_SORT=SCHINESE_PINYIN_M );

  ID NAME

   八

   八

   八千米死亡线

   笔画输入法

   测试啊

   二

   九

   六

   七

   三

   十

   四

   五

   下午啦

   一

   中文

   中文拼音

   rows selected

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

  ID NAME

  

   一

   七

   二

   九

   八

   八

   八千米死亡线

   十

   三

   下午啦

   五

   中文

   中文拼音

   六

   四

   测试啊

   笔画输入法

   测试服务器

   rows selected

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

  ID NAME

  

   一

   七

   二

   三

   下午啦

   五

   中文

   中文拼音

   九

   八

   八

   八千米死亡线

   六

   十

   四

   测试啊

   笔画输入法

   测试服务器

   rows selected

  SQL>

  这个结果似乎比较符合预期结果

  NLS_SORT=SCHINESE_RADICAL_M  按照部首排序

  NLS_SORT=SCHINESE_STROKE_M 按照笔画排序

cha138/Article/program/Oracle/201311/17664

相关参考

知识大全 深入oracle特定信息排序的分析

  在Oracle查询中如果在没有排序但又想让某列中特定值的信息排到前面的时候使用oracle的decode(字段字段值数字)cha138/Article/program/Oracle/20

知识大全 Oracle聚集函数排序

Oracle聚集函数排序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于按照自定义聚集函数连

知识大全 Oracle基本查询过滤排序示例解析

Oracle基本查询过滤排序示例解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!以下是对Orac

知识大全 Oracle分页查询中排序与效率问题

Oracle分页查询中排序与效率问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  原始未分页查

知识大全 解决Oracle分页查询中排序与效率问题

解决Oracle分页查询中排序与效率问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  原始未分

知识大全 用排序哈希簇来提升ORACLE查询速度

用排序哈希簇来提升ORACLE查询速度  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当数据存储

知识大全 oracle笔记之简单查询、限定查询和排序

  别名  oracle别名如果别名包含空格特殊字符(如#$)或需区分大小写(Name)需要用双引号把别名引起来  selectenameName  sal*AnnualSalary  fromemp

知识大全 oracle中rownum对排序的影响及解决方法

  标准的rownum分页查询使用方法  select*     from(selectc*rownumrnfromcontentc) &n

知识大全 构建可反转排序泛型字典类(2)--排序方向

  排序方向  你希望ReversibleSortedList类中的元素是以TKey(键)的顺序进行存储的并且它即可以从小排到大也可以从大排到小当然最佳方式就是在添加元素时找到合适的位置插入插入后元素

知识大全 Jjava中文汉字排序

Jjava中文汉字排序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  //Collator类是用