Oracle 中汉字排序问题

本文介绍了Oracle9i中汉字排序不准确的问题及解决方案,包括设定环境变量、在会话中修改参数及使用NLSSORT函数等三种方法,并详细解释了不同排序方式的区别。

    oracle9i对汉字的排序默认为拼音排序,可是本人最近发新排列的结果并不准确,通过上网查找,现解决方法如下:

 

方法1: 设定环境变量
set NLS_SORT=SCHINESE_RADICAL_M ;export NLS_SORT (sh)
or setenv NLS_SORT SCHINESE_RADICAL_M (csh)
or regedit  
HKLC/SOFTWARE/ORACLE/home0/NLS_SORT       (win)

 

方法2: 在session中修改
alter session set NLS_SORT='SCHINESE_RADICAL_M'

 

方法3: 直接使用NLSSORT函数 (推荐)
select name,id from t
order by NLSSORT(name,'NLS_SORT = SCHINESE_STROKE_M')

设置NLS_SORT值:

SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序  

SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序  

SCHINESE_PINYIN_M 按照拼音排序

 

 

来源: http://hi.baidu.com/wangchao_cn/blog/item/dfb9e53d90723ec29e3d6217.html

### 排序原理 - **GaussDB**:GaussDB是基于开源的PostgreSQL内核开发的分布式关系型数据库,它的排序依赖于操作系统的字符集和排序规则设置。对于中文排序,通常会根据字符编码(如UTF - 8)和相应的语言环境来确定排序顺序,默认情况下可能按照字符的编码值进行排序,但可以通过设置不同的collation(排序规则)来改变排序方式,以适应不同的中文排序需求,例如按拼音排序等。 - **Oracle**:Oracle数据库有自己的一套字符集和排序规则体系。它支持多种语言和字符集,对于中文排序Oracle提供了不同的排序方法,如字典排序(根据汉字的拼音、部首等信息),可以通过NLS_SORT参数来指定排序规则,例如指定为'SCHINESE_PINYIN_M'表示按拼音排序。 ### 排序性能 - **GaussDB**:在数据量较小的情况下,GaussDB的排序性能表现良好,能够快速完成中文排序操作。当数据量增大时,由于其分布式架构的优势,可以通过并行计算来提高排序效率,将数据分散到多个节点进行处理,减少排序时间。不过,如果排序规则设置复杂,可能会对性能产生一定影响。 - **Oracle**:Oracle在处理大规模数据的中文排序时,有较为成熟的优化机制。它的索引技术可以在一定程度上加速排序过程,尤其是在对有索引的字段进行排序时。但如果数据分布不均匀或者排序规则不合理,可能会导致性能下降,并且在分布式环境下的性能优化相对复杂。 ### 排序规则设置方式 - **GaussDB**:设置排序规则相对灵活,可以在数据库创建时指定默认的collation,也可以在表创建或者查询时指定特定的排序规则。例如,在创建表时可以使用`CREATE TABLE`语句指定列的排序规则: ```sql CREATE TABLE test_table ( name VARCHAR(100) COLLATE "zh_CN.utf8" ); ``` - **Oracle**:主要通过设置`NLS_SORT`参数来指定排序规则,可以在会话级别、系统级别进行设置。例如,在会话级别设置按拼音排序: ```sql ALTER SESSION SET NLS_SORT = 'SCHINESE_PINYIN_M'; ``` ### 排序结果准确性 - **GaussDB**:只要正确设置了合适的排序规则,GaussDB能够准确地按照预期进行中文排序,无论是按拼音、笔画等排序方式都能得到较为准确的结果。但如果排序规则设置不当,可能会出现排序不准确的情况。 - **Oracle**:Oracle排序结果准确性方面表现较为稳定,其内置的多种中文排序规则经过了大量的测试和优化,能够准确地实现按拼音、部首等排序需求。不过,在一些特殊字符或者自定义排序规则的情况下,可能需要进行额外的处理才能保证排序结果的准确性。 ### 兼容性 - **GaussDB**:由于基于PostgreSQL内核,在排序规则和语法上与PostgreSQL有一定的兼容性,对于熟悉PostgreSQL的用户来说容易上手。但在与其他数据库的交互和兼容性方面,可能需要进行一些适配工作。 - **Oracle**:Oracle数据库在企业级应用中广泛使用,其排序规则和相关功能具有较高的兼容性和稳定性。许多第三方工具和应用程序都对Oracle排序规则有良好的支持,但在与其他数据库进行数据迁移和交互时,可能需要处理排序规则的转换问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值