Oracle的order by的中文排序问题
2017-11-19 14:56
579 查看
Oracle 中查询结果按照某个中文字段或者英文字母(包括 符号)排序,并不会得到我们预期的结果,因为对于中文与英文字母及符号,Oracle实际是按照其对应的ASCII码值排序的!
可以看到按照中文村名排序并没有按照我们预期,按照村名的拼音字段排序,也是一样(实际是按照其对应的ASCII码值排序)!
当然,Oracle也提供了按照中文拼音排序,按照部首或笔画排序,方式如下:
按照拼音顺序:
ORDER BY nlssort(NAME, 'NLS_SORT=SCHINESE_PINYIN_M')
按照部首顺序:
ORDER BY nlssort(NAME, 'NLS_SORT=SCHINESE_RADICAL_M')
按照笔画顺序:
ORDER BY nlssort(NAME, 'NLS_SORT=SCHINESE_STROKE_M')
不过,对于多音字的排序还是有问题的。。。
所以我们最后的解决方案是,存储村名的拼音(多音字由人工识别),再按照拼音排序;其实也可以增加一个“排序值”的字段,按照1、2、3...排序。
===============================================================================================================
(不过,在 Linq to List中,按照中文排序是按照拼音来排序的,但同样对 多音字 的识别仍然有问题。)
可以看到按照中文村名排序并没有按照我们预期,按照村名的拼音字段排序,也是一样(实际是按照其对应的ASCII码值排序)!
当然,Oracle也提供了按照中文拼音排序,按照部首或笔画排序,方式如下:
按照拼音顺序:
ORDER BY nlssort(NAME, 'NLS_SORT=SCHINESE_PINYIN_M')
按照部首顺序:
ORDER BY nlssort(NAME, 'NLS_SORT=SCHINESE_RADICAL_M')
按照笔画顺序:
ORDER BY nlssort(NAME, 'NLS_SORT=SCHINESE_STROKE_M')
不过,对于多音字的排序还是有问题的。。。
所以我们最后的解决方案是,存储村名的拼音(多音字由人工识别),再按照拼音排序;其实也可以增加一个“排序值”的字段,按照1、2、3...排序。
===============================================================================================================
(不过,在 Linq to List中,按照中文排序是按照拼音来排序的,但同样对 多音字 的识别仍然有问题。)
相关文章推荐
- oracle 默认排序问题 和 order by ,rowid
- oracle 无order by , 默认排序问题
- ORACLE中文排序方式 vs SQL Server 2005的中文排序问题
- ORACLE中文排序方式 vs SQL Server 2005的中文排序问题
- ORACLE中文排序方式 vs SQL Server 2005的中文排序问题
- Oracle中的order by分页排序问题
- 浅谈Java、MySQL的中文排序问题
- Oracle中针对中文进行排序[Z]
- mysql 5.6 order by limit 排序分页数据重复问题
- 解决在Linux下安装Oracle时的中文乱码问题
- C#连接Oracle中文乱码问题解决方法
- ORACLE中文排序及在table中指定位置增加字段本篇文章来源于:开发学院 http://edu.codepub.com 原文链接:http://edu.codepub.com/2009/0531/5086.php
- Oracle中针对中文进行排序
- oracle 存储过程中文问题
- C# Oracle insert 过程中出现中文乱码问题
- Ext中文排序问题
- cx_Oracle读取中文乱码问题(转载)
- DB2中文排序问题的解决,如:“泸”、“汶”,此方法只适合DB2 V9.5版本
- mysql 查询的时候处理中文汉字按照字母排序问题
- ExtJS4.2学习(四)Grid表格中文排序问题(转)