熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

oracle數據字符集和排序

2022-06-13   來源: Oracle 

  今天難得有點小時間實際操作了一下關於oracle數據庫中的字符集和排序相關的命令特此整理出來以備後用

  Java代碼

  SQL> select * from v$nls_valid_values where parameter=CHARACTERSET order by ;

  PARAMETER                                                        VALUE

  

  CHARACTERSET                                                     ALUTF

  CHARACTERSET                                                     ALUTFFSS

  CHARACTERSET                                                     ALUTF

  SQL> select * from nls_database_parameters;

  PARAMETER                      VALUE

  

  NLS_LANGUAGE                   AMERICAN合法的語言名稱

  NLS_TERRITORY                  AMERICA合法的地域名稱

  NLS_CURRENCY                   $

  NLS_ISO_CURRENCY               AMERICA

  NLS_NUMERIC_CHARACTERS        

  NLS_CHARACTERSET               ZHSGBK數據庫字符集

  NLS_CALENDAR                   GREGORIAN

  NLS_DATE_FORMAT                DDMONRR日期格式

  NLS_DATE_LANGUAGE              AMERICAN

  NLS_SORT                       BINARY排序方式

  NLS_TIME_FORMAT                HHMISSXFF AM

  NLS_TIMESTAMP_FORMAT           DDMONRR HHMISSXFF AM

  NLS_TIME_TZ_FORMAT             HHMISSXFF AM TZR

  NLS_TIMESTAMP_TZ_FORMAT        DDMONRR HHMISSXFF AM TZR

  NLS_DUAL_CURRENCY              $

  NLS_COMP                       BINARY和排序相關的東東具體是什麼不清楚

  NLS_LENGTH_SEMANTICS           BYTE

  NLS_NCHAR_CONV_EXCP            FALSE

  NLS_NCHAR_CHARACTERSET         ALUTF國家字符集

  NLS_RDBMS_VERSION             

  已選擇

  已用時間:  : :

  SQL> create table char_t(c varchar()c nvarchar());

  表已創建

  已用時間:  : :

  SQL> select dbms_metadataget_ddl(TABLECHAR_T) FROM DUAL;

  DBMS_METADATAGET_DDL(TABLECHAR_T)

  

  CREATE TABLE SCOTTCHAR_T

  (    C VARCHAR()

  C NVARCHAR()

  ) PCTFREE PCTUSED INITRANS MAXTRANS NOCOMPRESS LOGGING

  STORAGE(INITIAL NEXT MINEXTENTS MAXEXTENTS

  PCTINCREASE FREELISTS FREELIST GROUPS BUFFER_POOL DEFAULT)

  TABLESPACE USERS

  已用時間:  : :

  SQL> INSERT INTO  char_t values(aa);

  已創建

  已用時間:  : :

  SQL> commit;

  提交完成

  已用時間:  : :

  SQL> select length(c)length(c)lengthb(c)lengthb(c) from char_t;

  LENGTH(C) LENGTH(C) LENGTHB(C) LENGTHB(C)

  

                                 

  已用時間:  : :

  SQL> insert into char_t values();

  已創建

  已用時間:  : :

  SQL>  select length(c)length(c)lengthb(c)lengthb(c) from char_t;

  LENGTH(C) LENGTH(C) LENGTHB(C) LENGTHB(C)

  

                                 

                                 

  已用時間:  : :

  SQL>  insert into char_t values();

  已創建

  已用時間:  : :

  SQL> select length(c)length(c)lengthb(c)lengthb(c) from char_t;

  LENGTH(C) LENGTH(C) LENGTHB(C) LENGTHB(C)

  

                                 

                                 

                                 

  已用時間:  : :

  至於一個VARCHAR字符要用幾個字節存儲要看數據庫使用的字符集

  比如GBK漢字就會占兩個字節英文如果是UTF漢字一般占個字節英文還是

  而NCHARNVARCHAR是以UNICODE存儲每個字符固定兩個字節

  SQL> select hiredate from emp;

  HIREDATE

  

  DEC

  FEB

  FEB

  APR

  SEP

  SQL> show user;

  USER is SCOTT

  SQL> alter session set nls_language=simplified chinese

  會話已更改

  已用時間:  : :

  SQL> select hiredate from emp;

  HIREDATE

  

  

  

  

  

  已用時間:  : :

  查看session中支持的語言名稱

  * select * from v$nls_valid_values where parameter=LANGUAGE order by

  QL> /

  ARAMETER                                                        VALUE

  

  ANGUAGE                                                         AMERICAN

  ANGUAGE                                                         ARABIC

  ANGUAGE                                                         ASSAMESE

  ANGUAGE                                                         AZERBAIJANI

  ANGUAGE                                                         BANGLA

  ANGUAGE                                                         BENGALI

  ANGUAGE                                                         BRAZILIAN PORTUGUESE

  查看合法的地域名稱

  SQL> select * from v$nls_valid_values where parameter=TERRITORY order by ;

  PARAMETER                                                        VALUE

  

  TERRITORY                                                        ALGERIA

  TERRITORY                                                        AMERICA

  TERRITORY                                                        AUSTRIA

  TERRITORY                                                        AZERBAIJAN

  TERRITORY                                                        CANADA

  TERRITORY                                                        CATALONIA

  TERRITORY                                                        CHILE

  TERRITORY                                                        CHINA

  查看合法的排行名稱

  SQL> select * from v$nls_valid_values where parameter=SORT order by ;

  PARAMETER                                                        VALUE

  

  SORT                                                             SCHINESE_PINYIN_M

  SORT                                                             SCHINESE_RADICAL_M

  SORT                                                             SCHINESE_STROKE_M

  查看當前會話的排行模式(系統默認的排行方式是BINARY)

  SQL> select value from nls_session_parameters where parameter=NLS_SORT;

  VALUE

  

  BINARY

  修改排行方式的測試

  SQL> alter session set nls_sort=SCHINESE_PINYIN_M;

  會話已更改

  已用時間:  : :

  SQL> select * from sort_tab order by ;

  C

  

  啊

  藏這個是個多音字在此處oracle把他當cang了

  木

  目

  人

  三

  一

  已選擇

  已用時間:  : :

  SQL>  alter session set NLS_SORT=SCHINESE_STROKE_M;按照筆劃(第一順序)部首(第二順序)排序

  會話已更改

  已用時間:  : :

  SQL>  select * from sort_tab order by ;

  C

  

  一

  人

  三

  木

  目

  啊

  藏

  已選擇

  已用時間:  : :

  SQL> alter session set NLS_SORT=GBK;

  會話已更改

  已用時間:  : :

  SQL> select * from sort_tab order by ;

  C

  

  啊

  藏

  木

  目

  人

  三

  一

  已選擇

  已用時間:  : :

  SQL> alter session set NLS_SORT=SCHINESE_RADICAL_M;按照部首(第一順序)筆劃(第二順序)排序

  會話已更改

  已用時間:  : :

  SQL>  select * from sort_tab order by ;

  C

  

  一

  三

  人

  啊

  木

  目

  藏

  已選擇

  已用時間:  : :

  SQL> ALTER SESSION SET NLS_SORT=BINARY;按字符的二進制值比較

  會話已更改

  已用時間:  : :

  SQL> select * from sort_tab order by ;

  C

  

  啊

  藏

  木

  目

  人

  三

  一

  已選擇

  已用時間:  : :

  注意如果NLS_SORT不是設置為Binary那麼就會引起全表掃描

  是不會使用索引的在我們的系統中變更單涉及到的數據都是數據龐大的表

  如果不使用到索引查詢的效率不受到影響才怪呢!

  修改數據庫字符集

  alter database orcl character set ZHSCGB;

  修改國家語言字符集

  alter database orcl national character set ZHSCGB;


From:http://tw.wingwit.com/Article/program/Oracle/201311/18856.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.