oracle按照中文排序

2021-12-30 12:46:03 字數 1202 閱讀 3356

oracle按照中文排序

在oracle 9i之前,對中文的排序,是預設按2進製編碼來進行排序的. 9i時增加了幾種新的選擇:

www.2cto.com  

按中文拼音進行排序:schinese_pinyin_m

按中文部首進行排序:schinese_radical_m

按中文筆畫進行排序:schinese_stroke_m

而oracle 9i是對中文的排序是預設按拼音排序(並不是指nls_sort = schinese_pinyin_m,而是說sql中不指定nls_sort時對中文列排序時預設按拼音)的,跟之前的2進製編碼排序有所不同.具體用法如下:

直接寫在sql中,例如:

select * from team order by nlssort(排序欄位名,'nls_sort = schinese_pinyin_m');

select * from team order by nlssort(排序欄位名,'nls_sort = schinese_stroke_m');

select * from team order by nlssort(排序欄位名,'nls_sort = schinese_radical_m');

www.2cto.com  

配置在初始化引數nls_sort中,這可以在資料庫建立時指定,也可以通過alter session來修改.如果是前者,則在所有session中生效.例如:

使用select * from nls_session_parameters;語句可以看到nls_sort的值.

更改配置檔案:alter system set nls_sort='schinese_pinyin_m' scope=spfile;

更改session:alter session set nls_sort = schinese_pinyin_m;

這裡要額外注意一下效能問題,按oracle官方文件的解釋,oracle在對中文列建立索引時,是按照2進製編碼進行排序的,所以如果nls_sort被設定為binary時,排序則可以利用索引.如果不是2進製排序,而是使用上面介紹的3種針對中文的特殊排序,則oracle無法使用索引,會進行全表掃瞄.這點一定要注意,多用plsql工具比較一下執行效率.解決方法是,在此列上建立linguistic index.例如:create index nls_index on my_table (nlssort(name, 'nls_sort = schinese_pinyin_m'));

mysql 查詢按照中文進行排序

在mysql中我們使用order by來實現查詢排序,如 select from member order by id asc 查詢使用者表並按照id正序排序 select from member order by id desc 查詢使用者表並按照id倒序排序但是我們如果想要排序的字段為中文時,這...

oracle中文排序

oracle中文排序 oracle9i之前,中文是按照二進位制編碼進行排序的。但oracle9以來,oracle的nlssort排序,可以用來進行語言排序,而不影響當前會話 例如按照拼音 部首 筆畫排序功能只需設定nls sort值 一 schinese radical m 按照部首 第一順序 筆劃...

ORACLE 中文排序

oracle9i之前,中文是按照二進位制編碼進行排序的。但oracle9以來,oracle的nlssort排序還是挻有意思的,它可以用來進行語言排序,不影響當前會話 例如按照拼音 部首 筆畫排序功能只需設定nls sort值 schinese radical m 按照部首 第一順序 筆劃 第二順序 ...