关于oracle对汉字的排序

最近项目过程中碰到对于数据进行排序按照升序排序需求。这需求貌似很简单,我没多想直接order by columnName。忽略了汉字排序的问题导致bug的出现。

 

业务要求,按照excel中排序出来的结果。对于汉字excel默认是按照拼音排序的,那么问题来了,oracle对于汉字究竟是如何排序的?

经查阅资料发现,对于oracle对汉字排序的问题网上说法不一。有的说是根据二进制编码排序的,有的却说是根据拼音排序的。

自己试了试,肯定默认不是拼音排序。可能是二进制编码吧。

 

说下具体怎么改,也是转载网上的一些方法。

1、语句级别设置排序方式:
     //按照笔划排序 
   select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M'); 
   //按照部首排序 
   select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M'); 
   //按照拼音排序,此为系统的默认排序方式 
   select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M'); 
2、Session级别的设置,修改ORACLE字段的默认排序方式:
              按拼音:alter session set nls_sort = SCHINESE_PINYIN_M;
              按笔画:alter session set nls_sort = SCHINESE_STROKE_M;
        

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值