oracle10中文排序规则,【NLSSORT】改变Oralce 对简体汉字的排序规则(拼音、部首、笔画)...

如果数据库字符集选用的是ZH16GBK,那么使用order by默认是按照汉字的“二进制编码”顺序进行排序的。有方法改变这个默认规则么?答案是肯定的,Oracle针对简体中文提供三种排序方法,主要是围绕“拼音”、“部首”和“笔画数”展开的。通过实验,给大家展示一下NLSSORT在改变简体汉字排序规则方面的魅力。1.在Oracle的官方文档中关于排序有如下描述“Linguistic Sorts”其中表“Table A-15 Multilingual LInguistic Sorts”中我们关注一下有关中文排序的内容(前三条与简体中文排序有关,后两条与繁体中文排序有关):1)SCHINESE_RADICAL_MSimplified Chinese sort based on radical as primary order and number of strokes order as secondary order注释:简体中文按照第一顺序是“部首”第二顺序是“笔画数”进行排序;2)SCHINESE_STROKE_MSimplified Chinese sort uses number of strokes as primary order and radical as secondary order注释:简体中文按照第一顺序“笔画数”是第二顺序是“部首”进行排序;3)SCHINESE_PINYIN_MSimplified Chinese PinYin sorting order注释:简体中文按照“拼音”进行排序;4)TCHINESE_RADICAL_MTraditional Chinese sort based on radical as primary order and number of strokes order as secondary order注释:繁体中文按照第一顺序是“部首”第二顺序是“笔画数”进行排序;5)TCHINESE_STROKE_MTraditional Chinese sort uses number of strokes as primary order and radical as secondary order. It supports supplementary characters.注释:繁体中文按照第一顺序“笔画数”是第二顺序是“部首”进行排序;2.创建实验表T,并初始化六条记录sec@secooler> create table t (x varchar2(10));sec@secooler> insert into t values ('侯');sec@secooler> insert into t values ('你');sec@secooler> insert into t values ('做');sec@secooler> insert into t values ('拉');sec@secooler> insert into t values ('推');sec@secooler> insert into t values ('拆');sec@secooler> commit;sec@secooler> select * from t;X------------------------------侯你做拉推拆6 rows selected.3.确认数据库版本和数据库字符集sec@secooler> select * from v$version;BANNER----------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionPL/SQL Release 11.2.0.1.0 - ProductionCORE    11.2.0.1.0      ProductionTNS for Linux: Version 11.2.0.1.0 - ProductionNLSRTL Version 11.2.0.1.0 - Productionsec@secooler> select userenv('language') from dual;USERENV('LANGUAGE')-----------------------------------------------------------AMERICAN_AMERICA.ZHS16GBK4.在此环境下,查看默认的汉字排序规则sec@secooler> select * from t order by x;X------------------------------拆侯拉你推做6 rows selected.可见,此时的默认汉字排序规则是“拼音”。5.使用nlssort强制按照拼音排序的方法sec@secooler> select * from t order by nlssort(x,'NLS_SORT=SCHINESE_PINYIN_M');X------------------------------拆侯拉你推做6 rows selected.6.使用nlssort强制按照“部首”(第一顺序)和“笔画数”(第二顺序)排序的方法sec@secooler> select * from t order by nlssort(x,'NLS_SORT=SCHINESE_RADICAL_M');X------------------------------你侯做拆拉推6 rows selected.单人旁的汉字在前,提手旁汉字在后;单人旁的三个汉字进一步又是按照笔画数多少进行的排序。7.使用nlssort强制按照“笔画数”(第一顺序)和“部首”(第二顺序)排序的方法sec@secooler> select * from t order by nlssort(x,'NLS_SORT=SCHINESE_STROKE_M');X------------------------------你拆拉侯做推6 rows selected.可见,越往后的汉字的笔画数越多。8.Oracle官方文档中关于NSLSORT函数的描述参考9.小结NSLSORT函数在国际化支持上提供了一个非常好的排序解决方案。在具体应用环境下有其重要的意义。善用之。Good luck.secooler10.02.24-- The End --

你可能感兴趣的:(oracle10中文排序规则)