数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

oracle数据字符集和排序


发布日期:2024年03月20日
 
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;

上一篇:oracle创建用户快捷命令

下一篇:随身携带的数据库