`

oracle数据字符集和排序

阅读更多
今天难得有点小时间,实际操作了一下关于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;
分享到:
评论

相关推荐

    Oracle 字符集详解

    在处理多语言数据时,Oracle提供了NLSSORT参数来调整排序规则,同时配合使用NLS_LANG环境变量来设定客户端的字符集和排序规则,确保数据的一致性。 总结,Oracle字符集是数据库管理的关键部分,理解和正确配置字符...

    Oracle 字符集的查看和修改

    Oracle 字符集是数据库系统中一个至关重要的概念,它决定了数据如何被编码、存储和解析。Oracle 支持多种字符集,以满足不同地区和语言的需求。本文将深入探讨 Oracle 字符集的查看、修改以及相关知识。 首先,...

    Oracle_字符集的查看和修改

    **Oracle 字符集** 是指 Oracle 数据库系统中用于解释字节数据的一组符号集合。Oracle 支持多国语言架构,这使得用户能够在不同的语言环境下存储、处理及检索数据。这一功能不仅包括基本的数据存储,还涉及到了...

    oracle字符集资料

    Oracle字符集是数据库管理系统Oracle中用于存储和处理文本数据的关键组件。它定义了数据库能够识别和存储的不同字符的集合,包括字母、数字、符号以及特殊字符。深入理解Oracle字符集对于数据库管理员、开发人员和...

    ORACLE 字符集总结

    在Oracle数据库中,字符集不仅涉及到数据的存储,还涉及到排序规则、日期和货币格式等本地化设置。本文将深入探讨Oracle字符集的原理、查询方法以及如何处理字符集不一致的问题。 首先,Oracle字符集是一个定义了...

    Oracle数据库字符集问题总结

    Oracle数据库字符集问题总结主要关注的是在数据迁移和交互时由于字符集差异导致的问题。字符集是决定数据库如何解释和存储字符的规则集合,对于Oracle数据库来说,它直接影响到数据的正确性和兼容性。 首先,Oracle...

    熟知Oracle字符集

    Oracle字符集是指在Oracle数据库中用于存储和处理文本数据的一组符号及这些符号的编码方式。字符集对于确保数据正确显示和存储至关重要,尤其是在处理多语言或多区域数据时。Oracle支持多种字符集,包括单字节字符集...

    oracle字符集说明

    Oracle字符集是数据库系统中用于表示文本数据的一种编码方式,它是Oracle数据库为了支持多种语言和文化环境而设计的重要特性。Oracle字符集不仅包含了常见的ASCII字符,还包含了各种国家和地区的特殊字符,使得用户...

    imp exp字符集解决方案

    Oracle字符集是数据库管理系统Oracle中用于编码和解析字符的关键组件,它定义了如何存储和显示各种语言的文字。字符集有大小之分,并且存在包容关系,即某些字符集是其他字符集的子集,比如us7ascii是zhs16gbk的子集...

    最新OCI(百分百兼容Oracle所有版本字符集).zip

    3. `orannzsbb12.dll` 和 `orannzsbb10.dll`:这些是Oracle的网络排序规则库,用于在网络传输过程中处理数据排序和比较。 4. `oraocci12d.dll` 和 `oraocci12.dll`,以及 `oraocci10.dll`:这是Oracle Call ...

    oracle查看字符集和修改字符集使用详解

    Oracle字符集是数据库管理系统Oracle中用于定义和理解数据的一个关键概念。字符集是一个字节数据的解释集合,它决定了数据库如何存储和显示字符。Oracle支持多种国家语言,使其能够适应不同地区和语言环境的需求,...

    oracle字符集查看与修改[归类].pdf

    Oracle字符集是数据库管理系统Oracle中用于表示和存储文本数据的关键组件。它决定了如何将字符转换为二进制数据,以及如何从二进制数据还原字符。Oracle字符集分为多个类别,包括单字节编码和多字节编码,以支持全球...

    解决Oracle中文乱码.pdf

    Oracle 字符集是 Oracle 数据库中一个非常重要的概念,正确的字符集设置可以确保数据的正确性和一致性。本文对 Oracle 字符集的概念、种类和查询方法进行了详细的介绍,并对 Oracle 字符集乱码问题进行了分析和解决...

    oracle数据库中汉字排序方法

    ### Oracle数据库中汉字排序方法 在Oracle数据库中处理中文数据时,经常需要对包含中文字符的数据表...通过以上内容的学习与实践,我们可以有效地在Oracle数据库中实现汉字排序功能,从而更好地管理和利用中文数据。

    修改oracle字符集

    Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容联系。ORACLE 支撑国家语言的体系结构允许你运用本地化语言来存储,处理,检索数据。它使数据库工具,不正确消息,排序次序,日期,时间,货币...

    导出/导入与字符集之间问题的解决

    总之,Oracle的多国语言支持和字符集设置是其全球化功能的基础,正确理解和管理这些设置对于数据库的正常运作和数据完整性至关重要。处理跨字符集的导出/导入问题需要对字符集有深入理解,并可能涉及二进制文件的...

    MYSQL字符集与乱码问题分析

    MySQL支持多种字符集,如latin1、utf8、utf8mb4等,每种字符集对应特定的排序规则(collation),影响数据的比较和存储。 #### 字符集的配置与相关命令 通过修改my.cnf或my.ini配置文件中的`character_set_server`...

    oracle处理的类型 oracle行排序

    除了常规的SQL排序,Oracle还提供了一些高级功能,如窗口函数,它们允许在特定的数据窗口内进行排序和计算。例如,RANK()、DENSE_RANK()和ROW_NUMBER()函数可以为每个分组内的行分配一个唯一的排名,这对于分组后的...

Global site tag (gtag.js) - Google Analytics