美文网首页我爱编程oracle
Oracle中针对中文进行排序

Oracle中针对中文进行排序

作者: 赛赛赛 | 来源:发表于2018-08-04 20:14 被阅读0次

在oracle 9i之前,对中文的排序,是默认按2进制编码来进行排序的. 9i时增加了几种新的选择:

按中文拼音进行排序:SCHINESE_PINYIN_M
按中文部首进行排序:SCHINESE_RADICAL_M
按中文笔画进行排序:SCHINESE_STROKE_M

而oracle 9i是对中文的排序是默认按拼音排序(并不是指NLS_SORT = SCHINESE_PINYIN_M,而是说SQL中不指定NLS_SORT时对中文列排序时默认按拼音)的,跟之前的2进制编码排序有所不同.具体用法如下:

直接写在sql中,例如:

SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_PINYIN_M');
SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_STROKE_M');
SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_RADICAL_M');

配置在初始化参数NLS_SORT中,这可以在数据库创建时指定,也可以通过alter session来修改.如果是前者,则在所有session中生效.例如:

使用          select * from NLS_SESSION_PARAMETERS;语句可以看到NLS_SORT的值.
更改配置文件: alter system set nls_sort='SCHINESE_PINYIN_M' scope=spfile;
更改          session:alter SESSION set NLS_SORT = SCHINESE_PINYIN_M;

这里要额外注意一下性能问题,按oracle官方文档的解释,oracle在对中文列建立索引时,是按照2进制编码进行排序的,所以如果NLS_SORT被设置为BINARY时,排序则可以利用索引.如果不是2进制排序,而是使用上面介绍的3种针对中文的特殊排序,则oracle无法使用索引,会进行全表扫描.这点一定要注意,多用plsql工具比较一下执行效率.解决方法是,在此列上建立linguistic index.例如:CREATE INDEX nls_index ON my_table (NLSSORT(name, 'NLS_SORT = SCHINESE_PINYIN_M'));

以下是oracle文档中的原文:

Note:
Setting NLS_SORT to anything other than BINARY causes a sort to use a full table scan, regardless of the path chosen by the optimizer. BINARY is the exception because indexes are built according to a binary order of keys. Thus the optimizer can use an index to satisfy the ORDER BY clause when NLS_SORT is set to BINARY. If NLS_SORT is set to any linguistic sort, the optimizer must include a full table scan and a full sort in the execution plan.

相关文章

  • Oracle中针对中文进行排序

    在oracle 9i之前,对中文的排序,是默认按2进制编码来进行排序的. 9i时增加了几种新的选择: 而oracl...

  • Oracle基础学习

    oracle实现汉字按照拼音、笔画和部首排序Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9...

  • lambda

    针对字典进行排序 针对数组,其每个元素为字典,按照字典的某个key进行排序

  • 基础排序算法总结(七种排序算法C代码)

    排序是最基础的算法,从排序的对象来说主要分为内部排序和外部排序。内部排序主要是针对内存中的数据进行排序,外部排序针...

  • 在table中的前端排序

    有些时候需要前端进行来排序,排序的时候通常需要对同时包含:数字、字母、中文的对象进行排序; let data = ...

  • Oracle索引(Index)创建使用

    Oracle对象教程:索引(Index)创建使用,索引:对数据库表中的某些列进行排序,便于提高查询效率。 当我们在...

  • js混合排序(数字+字母+中文)

    项目中有时需要对数组对象中的某个属性进行排序,属性值按照一定的规则进行排序,下面以数字-中文首字母-英文大写-英文...

  • 第二天

    Oracle 数据库查询排序 什么叫查询排序呢?在SQL定义的过程之中,默认情况下都是根据ID进行排序,也就是说如...

  • sort

    1、sort是针对列表进行排序的,改变列表本身 2、字典采用sorted

  • Java中进行中文排序

    项目中遇到一个问题,需要使用Java进行名称的排序输出。此时,使用 Collections.sort(source...

网友评论

    本文标题:Oracle中针对中文进行排序

    本文链接:https://www.haomeiwen.com/subject/pfamvftx.html