Oracle 中的汉字排序
无意中发现,Oracle11中的中文排序不对,没有按照正常的拼音顺序排序。
于是找到
http://www.cppblog.com/snowhill/articles/144442.html
原来Oracle针对汉字的排序还有三种方案。
缺省是Binary。(select * from nls_database_parameters;可以看到)
汉字的排序方案有:
SCHINESE_STROKE_M 笔画
SCHINESE_RADICAL_M 偏旁
SCHINESE_PINYIN_M 拼音
只需要给操作系统的注册表
HKLC\SOFTWARE\ORACLE\home0\NLS_SORT
设置一下 nls_sort=SCHINESE_PINYIN_M。
所有排序就直接缺省按拼音排了。
后来发现改完之后可能会带来性能问题。
http://www.cnblogs.com/yanrongpi/archive/2008/04/11/1149144.html
缺省的索引都是按照Binary来设置的。
如果修改了nls_sort,还得建相应的索引。否则即使字段有索引了,排序仍然是全表扫描。
记录一下,备用。
于是找到
http://www.cppblog.com/snowhill/articles/144442.html
原来Oracle针对汉字的排序还有三种方案。
缺省是Binary。(select * from nls_database_parameters;可以看到)
汉字的排序方案有:
SCHINESE_STROKE_M 笔画
SCHINESE_RADICAL_M 偏旁
SCHINESE_PINYIN_M 拼音
只需要给操作系统的注册表
HKLC\SOFTWARE\ORACLE\home0\NLS_SORT
设置一下 nls_sort=SCHINESE_PINYIN_M。
所有排序就直接缺省按拼音排了。
后来发现改完之后可能会带来性能问题。
http://www.cnblogs.com/yanrongpi/archive/2008/04/11/1149144.html
缺省的索引都是按照Binary来设置的。
如果修改了nls_sort,还得建相应的索引。否则即使字段有索引了,排序仍然是全表扫描。
记录一下,备用。
评论