oracle mysql 中文排序规则_ORACLE对中文排序性能优化

Oracle提供了以下类型的排序方式:(1)二进制排序(2)单语言形式排序(3)多语言形式排序

使用二进制排序排序字符数据的一种方法是基于字符的数值定义的字符编码方案。这就是所谓的二进制排序。二进制排序是最快的类型的排序。他们对英文字母产生合理的结果,因为ASCII、EBCDIC标准定义提升数值的字母A到Z。

(在ASCII标准,所有大写字母排在小写字母之前。在EBCDIC标准,情况恰恰相反:所有小写字母排在大写字母之前)

单语言形式排序

单语言形式排序中oracle比较字符串分两个步骤。第一步从一个主要值表中比较整个字符串的主要值。通常,字母相同的外观有相同的主要值。第二步从一个次要值表中比较次要值。主要值、次要值都是有oracle定义的。甲骨文将字母与发音符号的情况差异定义为拥有相同的主要值但不同的次要值。

(单语言形式排序是不能用于unicode数据库多字节字符集。如果指定一个单语言数据库字符集是unicode多字节,那么默认的排序顺序是二进制排序顺序的数据库字符集。UNICODE_BINARY是一个例外。这种对所有字符集可用。)

多语言形式排序

Oracle提供多语种语言类型,这样就可以对一种数据支持多种语言的排序。这一般应用在地区或语言有复杂的排序规则和多语言数据库。oracle10g之前上一版本定义的所有的排序方式。

对于亚洲语言数据或多语言数据,Oracle提供了一个排序机制基于ISO

14651标准和Unicode 4.0标准。汉字是按照笔画,拼音或部首排序。

oracle 对中文排序方式

oracle数据库在创建时可以执行数据库的语言,也可以通过alter

session来修改。如果在创建数据库是执行,则所有的session中会生效。使用 select * from

nls_session_parameters

语句可以看到NLS_SORT的值。

默认NLS_SORT的值为BINARY还可以将其修改为:SCHINESE_RADICAL_M、SCHINESE_STROKE_M、SCHINESE_PINYIN_M

1、设置NLS_SORT参数值

SCHINESE_RADICAL_M

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

SCHINESE_STROKE_M

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

SCHINESE_PINYIN_M 按照拼音排序

2、Session级别的设置,修改ORACLE字段的默认排序方式:

按拼音:alter session set nls_sort =

SCHINESE_PINYIN_M;

按笔画:alter session set nls_sort =

SCHINESE_STROKE_M;

按偏旁:alter session set nls_sort =

NLS_SORT=SCHINESE_RADICAL_M;

3、语句级别设置排序方式:

按照笔划排序

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');

4、修改系统参数(数据库所在操作系统):

set NLS_SORT=SCHINESE_RADICAL_M

;export NLS_SORT (sh)

setenv NLS_SORT SCHINESE_RADICAL_M

(csh)

HKLCSOFTWAREORACLEhome0NLS_SORT

(win注册表)

oracle 在对中文列创建索引时是按照二进制编码进行排序的

如果NLS_SORT被设置为binary时,排序则可以利用索引。如果中文:SCHINESE_PINYIN_M、SCHINESE_RADICAL_M、SCHINESE_STROKE_M

oracle是无法使用索引,需要在对应列上创建linguistic index

例如:CREATE INDEX nls_index ON my_table

(NLSSORT(name, 'NLS_SORT = SCHINESE_PINYIN_M'));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值