Oracle的中文排序問題


環境

  • windows 7
  • Oracle 11g
  • PL/SQL

問題

對oracle中的一張表中的某個字段進行排序,要求按照字母序進行倒序展示;

直接使用**order by xxx desc**查詢結果,如下所示:

排序結果並沒有按照字母序,而且不知道這個是什么順序?

解決

通過百度知道,oracle 9i之前對中文的排序默認是按照二進制排序的,11g中查詢到的默認排序也是二進制,可以通過下面的sql語句查詢到:

select * from NLS_SESSION_PARAMETERS;

查詢結果中的'NLS_SORT'的值是'BINARY',也就是二進制排序;

但是在oracle 9i之后,新增了幾種新的排序選擇,分別是按照'拼音'排序、按照'中文部首'排序、按照'中文筆畫'進行排序.

select * from 表名 order by NLSSORT(排序字段,'SCHINESE_PINYIN_M');//按照拼音排序
select * from 表名 order by NLSSORT(排序字段,' SCHINESE_STROKE_M');//按照筆畫排序
select * from 表名 order by NLSSORT(排序字段,' SCHINESE_RADICAL_M');//按照部首排序

問題中的查詢語句,使用拼音排序之后的結果如下所示:

其他

  • 根據網上的說法,使用新的排序方法不會使用索引,會進行全表掃描,解決方法是,在此列上建立linguistic index.例如:CREATE INDEX nls_index ON my_table (NLSSORT(name, 'NLS_SORT = SCHINESE_PINYIN_M')),未進行測試;
  • 根據網上的說法,拼音排序對於多音字的處理還是有問題的,未進行測試;

參考文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM