博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle 按照中文排序
阅读量:6286 次
发布时间:2019-06-22

本文共 1086 字,大约阅读时间需要 3 分钟。

  hot3.png

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

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

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

  1. 直接写在sql中,例如:
    1. SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_PINYIN_M');
    2. SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_STROKE_M');
    3. SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_RADICAL_M');
  2. 配置在初始化参数NLS_SORT中,这可以在数据库创建时指定,也可以通过alter session来修改.如果是前者,则在所有session中生效.例如:
    1. 使用select * from NLS_SESSION_PARAMETERS;语句可以看到NLS_SORT的值.
    2. 更改配置文件:alter system set nls_sort='SCHINESE_PINYIN_M' scope=spfile;
    3. 更改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'));

转载于:https://my.oschina.net/sunfei/blog/110779

你可能感兴趣的文章
如何在Window 10上安装Docker
查看>>
python模块samba
查看>>
Linux 安全配置规范
查看>>
ESXI开启SSH
查看>>
RH124 单元一 Gnome图形桌面使用入门
查看>>
为fastcgi下的php配置共享内存的eAccelerator加速
查看>>
docker 基本操作Ⅱ(关于镜像操作)
查看>>
5.1、Android Studio用Logcat编写和查看日志
查看>>
[BZOJ4785][P3688][ZJOI2017]树状数组[树套树+树状数组]
查看>>
[Hyper-V]给Hyper-V创建两块网卡备用
查看>>
ubuntu 软件安装相关
查看>>
高质量外链的获取途径,你知道几个呢
查看>>
U盘不识别怎么办?
查看>>
我的友情链接
查看>>
Maximum execution time of 30 seconds exceeded解决方案
查看>>
centos6.2 将mysql数据存储位置移动教程
查看>>
无线路由器更换密码之后iphone没有办法链接
查看>>
MyBatis动态传入表名查询数据
查看>>
Echarts助力大数据绘制可视化图表零基础入门-针对运维
查看>>
读书笔记<Python3>1
查看>>