设为首页 收藏本站
查看: 517|回复: 0

[经验分享] oracle数据字符集和排序

[复制链接]

尚未签到

发表于 2016-7-31 12:19:46 | 显示全部楼层 |阅读模式
今天难得有点小时间,实际操作了一下关于oracle数据库中的字符集和排序相关的命令,特此整理出来,以备后用。
SQL> select * from v$nls_valid_values where parameter='CHARACTERSET' order by 2;
PARAMETER                                                        VALUE
---------------------------------------------------------------- -----------------------
CHARACTERSET                                                     AL16UTF16
CHARACTERSET                                                     AL24UTFFSS
CHARACTERSET                                                     AL32UTF8

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               ZHS16GBK--数据库字符集
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR--日期格式
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                       BINARY--排序方式
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY              $
NLS_COMP                       BINARY--和排序相关的东东,具体是什么不清楚
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE
NLS_NCHAR_CHARACTERSET         AL16UTF16--国家字符集
NLS_RDBMS_VERSION              10.1.0.2.0
已选择20行。
已用时间:  00: 00: 00.03
SQL> create table char_t(c1 varchar2(8),c2 nvarchar2(8));
表已创建。
已用时间:  00: 00: 00.21
SQL> select dbms_metadata.get_ddl('TABLE','CHAR_T') FROM DUAL;
DBMS_METADATA.GET_DDL('TABLE','CHAR_T')
--------------------------------------------------------------------------------
CREATE TABLE "SCOTT"."CHAR_T"
(    "C1" VARCHAR2(8),
"C2" NVARCHAR2(8)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS"

已用时间:  00: 00: 05.15
SQL> INSERT INTO  char_t values('a','a');
已创建 1 行。
已用时间:  00: 00: 00.01
SQL> commit;
提交完成。
已用时间:  00: 00: 00.00
SQL> select length(c1),length(c2),lengthb(c1),lengthb(c2) from char_t;
LENGTH(C1) LENGTH(C2) LENGTHB(C1) LENGTHB(C2)
---------- ---------- ----------- -----------
1          1           1           2
已用时间:  00: 00: 00.00
SQL> insert into char_t values('中','中');
已创建 1 行。
已用时间:  00: 00: 00.00
SQL>  select length(c1),length(c2),lengthb(c1),lengthb(c2) from char_t;
LENGTH(C1) LENGTH(C2) LENGTHB(C1) LENGTHB(C2)
---------- ---------- ----------- -----------
1          1           1           2
1          1           2           2
已用时间:  00: 00: 00.00
SQL>  insert into char_t values('遽','遽');
已创建 1 行。
已用时间:  00: 00: 00.01
SQL> select length(c1),length(c2),lengthb(c1),lengthb(c2) from char_t;
LENGTH(C1) LENGTH(C2) LENGTHB(C1) LENGTHB(C2)
---------- ---------- ----------- -----------
1          1           1           2
1          1           2           2
1          1           2           2
已用时间:  00: 00: 00.01
至于一个VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,
比如GBK,汉字就会占两个字节,英文1个,如果是UTF-8,汉字一般占3个字节,英文还是1个。
而NCHAR、NVARCHAR是以UNICODE-16存储,每个字符固定两个字节。
SQL> select hiredate from emp;
HIREDATE
------------
17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81

SQL> show user;
USER is "SCOTT"
SQL> alter session set nls_language='simplified chinese'
会话已更改。
已用时间:  00: 00: 00.01
SQL> select hiredate from emp;
HIREDATE
--------------
17-12月-80
20-2月 -81
22-2月 -81
02-4月 -81
已用时间:  00: 00: 00.01
查看session中支持的语言名称
1* select * from v$nls_valid_values where parameter='LANGUAGE' order by 2
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 2;
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 2;
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';
会话已更改。
已用时间:  00: 00: 00.00
SQL> select * from sort_tab order by 1;
C
----------

藏--这个是个多音字,在此处oracle把他当cang了。





已选择7行。
已用时间:  00: 00: 00.01
SQL>  alter session set NLS_SORT='SCHINESE_STROKE_M';--按照笔划(第一顺序)、部首(第二顺序)排序
会话已更改。
已用时间:  00: 00: 00.09
SQL>  select * from sort_tab order by 1;
C
----------







已选择7行。
已用时间:  00: 00: 00.00
SQL> alter session set NLS_SORT='GBK';
会话已更改。
已用时间:  00: 00: 00.01
SQL> select * from sort_tab order by 1;
C
----------







已选择7行。
已用时间:  00: 00: 00.00
SQL> alter session set NLS_SORT='SCHINESE_RADICAL_M';--按照部首(第一顺序)、笔划(第二顺序)排序
会话已更改。
已用时间:  00: 00: 00.04
SQL>  select * from sort_tab order by 1;
C
----------







已选择7行。
已用时间:  00: 00: 00.01
SQL> ALTER SESSION SET NLS_SORT=BINARY;--按字符的二进制值比较
会话已更改。
已用时间:  00: 00: 00.00
SQL> select * from sort_tab order by 1;
C
----------







已选择7行。
已用时间:  00: 00: 00.01
注意:如果NLS_SORT不是设置为"Binary",那么就会引起全表扫描,
是不会使用索引的,在我们的系统中变更单涉及到的数据都是数据庞大的表,
如果不使用到索引,查询的效率不受到影响才怪呢!
修改数据库字符集:
alter database "orcl" character set ZHS16CGB231280;
修改国家语言字符集:
alter database "orcl" national character set ZHS16CGB231280;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-251490-1-1.html 上篇帖子: hibernat use many-to-many---oracle 下篇帖子: oracle 复合数据类型(批量绑定)2
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表