在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.
转载:http://www.cnblogs.com/discuss/articles/1866953.html
相关推荐
Oracle9i及其后续版本提供了多种预定义的排序规则,其中包括针对中文排序的特殊规则。“NLS_SORT”参数用于控制查询结果的排序方式。在中文环境下,Oracle提供了三种主要的排序方式: 1. **按拼音排序**(`SCHINESE...
本文详细介绍了Oracle数据库中针对汉字排序的方法以及如何禁用表中的列而不是直接删除。这些技巧对于处理大量中文数据和优化表结构非常有用。通过合理利用`NLSSORT()`函数和`ALTER TABLE...SET UNUSED`命令,可以...
Toad for Oracle是一款由Quest Software开发的数据库管理工具,专门针对Oracle数据库系统设计。这款工具在数据库管理员、开发人员和分析师中广泛使用,因为它提供了强大的数据查询、数据库设计、性能优化以及自动化...
在Oracle数据库中,对包含中文字符的字段进行排序是一项常见的操作。这有助于用户根据特定的规则(如笔画、部首或拼音)查看和管理数据。以下是对标题和描述中提及的三种排序方式的详细解释: 1)按笔画排序: 在...
根据提供的文件信息,本文将详细解释如何在Oracle数据库中实现汉字到拼音的转换,并通过具体的代码实例进行说明。 ### Oracle数据库中的汉字转拼音 #### 背景介绍 在处理包含中文字符的数据时,有时我们需要将汉字...
标题“SQL按拼音首字母排序”以及描述中的关键词“SQL按拼音排序”,指向了一种特殊的数据排序需求:在数据库中,针对包含中文字符的字段,按照中文拼音的首字母进行排序。这在处理大量含有中文名称、地点等信息的...
Oracle9i OCA中文教程是针对想要学习Oracle Certified Associate(OCA)认证的初学者而设计的一套教学资源。Oracle数据库是全球广泛使用的数据库管理系统,而OCA认证是Oracle认证体系中的入门级别,证明持证人具备...
《Oracle 19C SQL调优指南》是针对Oracle数据库管理员(DBA)的重要参考资料,尤其适合那些希望提升SQL性能的专业人士。SQL调优是数据库管理中的核心技能,它关乎到系统的响应时间、资源利用率和整体性能。Oracle 19C...
在 Oracle 全文检索实现中,Document 结构是 Lucene 的索引单元,源数据必须转化为对应的文档才能进行索引。针对 Oracle 数据库的全文检索,文档结构设计成由两个域 ID 和 CONTENT 组成,ID 根据表名和联合主键组合...
针对PHP与PDO (PHP Data Objects) 扩展连接Oracle数据库时出现的中文乱码问题,通常是因为字符编码设置不一致导致的。以下是关于如何解决php与pdo连接oracle时中文乱码问题的详细步骤及知识点。 首先,要了解Oracle...
### Toad for Oracle 10 中文手册知识点详解 #### 一、Toad for Oracle 概述 **Toad for Oracle** 是一款专为Oracle应用开发人员设计的强大工具集,旨在提升开发效率并简化数据库管理和维护流程。它包含了丰富的...
在数据库处理中文数据时,有时候我们需要根据汉字转换成对应的拼音首字母来进行检索或排序。Oracle提供了多种方式来处理字符串,但针对汉字转拼音首字母的功能并没有内置的支持。本文将详细介绍一个自定义的Oracle...
- 性能监测与优化:通过一系列的技术手段对Oracle数据库的性能进行监测,并针对发现的问题采取相应的优化措施。 - 数据备份与恢复:为防止数据丢失,定期进行数据库备份,并具备快速有效的数据恢复能力。 - 迁移管理...
- **企业级,具有行业特色的工具和企业绩效管理应用**:除了基础的数据分析能力外,Oracle 11G BIDW 还提供了一系列专门针对特定行业的分析应用,帮助企业在各自的市场中脱颖而出。 - **全面的数据管理解决方案**:...
- **排序输出**:使用ORDER BY子句对结果进行排序。 ```sql SELECT column1, column2, ... FROM table_name ORDER BY column1, column2; ``` #### 4. 数据类型与表结构 - **数据类型**:Oracle 9i SQL2支持...
【Oracle10G培训日志】是针对Oracle数据库10g版本的学习记录,由动力节点教育科技有限公司的王勇老师主讲。这份日志全面且详细地介绍了Oracle 10g的基本概念、操作和应用,旨在帮助学习者掌握这一重要的数据库管理...
正常情况下, WHERE 子句中进行的比较是二进制的, 但语言比较则需要 NLSSORT 函数。可以使用 NLS_COMP 指定必须根据NLS_SORT 会话参数进行语言比较。 值范围: Oracle8i National Language Support Guide 中指定的...
本笔记主要针对Oracle 10g版本的学习。 #### 二、Oracle 10g安装与配置 - **安装步骤**: - **环境准备**:确保操作系统满足Oracle 10g的要求。 - **安装过程**:包括软件包安装、配置等。 - **特定平台安装**:...
在实际应用中,除了上述基本的SELECT语句之外,可能还会需要其他的功能,例如在SELECT语句中进行排序(ORDER BY)、分组(GROUP BY)、聚合数据(使用聚合函数,如COUNT、SUM、AVG等)。同时,为了提高查询效率,还...
- **问题列表**: 文档中列出了在使用Oracle数据库过程中可能会遇到的一些常见问题及其解决方案。 以上是对《Oracle数据库操作大全》文档的部分内容的详细总结和解释,涵盖了数据库创建、基本操作以及如何解决常见的...