• Oracle的中文排序问题


    环境

    • windows 7
    • Oracle 11g
    • PL/SQL

    问题

    对oracle中的一张表中的某个字段进行排序,要求按照字母序进行倒序展示;

    直接使用**order by xxx desc**查询结果,如下所示:

    排序结果并没有按照字母序,而且不知道这个是什么顺序?

    解决

    通过百度知道,oracle 9i之前对中文的排序默认是按照二进制排序的,11g中查询到的默认排序也是二进制,可以通过下面的sql语句查询到:

    select * from NLS_SESSION_PARAMETERS;

    查询结果中的'NLS_SORT'的值是'BINARY',也就是二进制排序;

    但是在oracle 9i之后,新增了几种新的排序选择,分别是按照'拼音'排序、按照'中文部首'排序、按照'中文笔画'进行排序.

    select * from 表名 order by NLSSORT(排序字段,'SCHINESE_PINYIN_M');//按照拼音排序
    select * from 表名 order by NLSSORT(排序字段,' SCHINESE_STROKE_M');//按照笔画排序
    select * from 表名 order by NLSSORT(排序字段,' SCHINESE_RADICAL_M');//按照部首排序

    问题中的查询语句,使用拼音排序之后的结果如下所示:

    其他

    • 根据网上的说法,使用新的排序方法不会使用索引,会进行全表扫描,解决方法是,在此列上建立linguistic index.例如:CREATE INDEX nls_index ON my_table (NLSSORT(name, 'NLS_SORT = SCHINESE_PINYIN_M')),未进行测试;
    • 根据网上的说法,拼音排序对于多音字的处理还是有问题的,未进行测试;

    参考文档

  • 相关阅读:
    迭代器和生成器
    New test
    MySQL笔记整理
    Python基础数据类型
    Python基础
    Python入门知识
    Linux / MacOS 下Redis 安装、配置和连接
    NuGet的使用心得
    简单工厂模式和策略模式的区别与结合
    NuGet的使用和服务搭建
  • 原文地址:https://www.cnblogs.com/liaidai/p/10215949.html
Copyright © 2020-2023  润新知