当前位置:首页 > 芯闻号 > 充电吧
[导读]最近项目上有个问题是需要获取oracle数据库中表定义的字段长度,然后进行验证将要输入到该数据库表的数据是否超出字段定义的长度。所以对oracle存储字符串的类型进行了解。1、首先了解varchar、

最近项目上有个问题是需要获取oracle数据库中表定义的字段长度,然后进行验证将要输入到该数据库表的数据是否超出字段定义的长度。所以对oracle存储字符串的类型进行了解。

1、首先了解varchar、varchar2、nvarchar、nvarchar2的区别


--varchar,varchar2

联系:
1.varchar/varchar2用于存储可变长度的字符串
比如varchar(20),存入字符串'abc',则数据库中该字段只占3个字节,而不是20个字节
2.size 的最大值是 4000,而最小值是 1,其值表示字节数,比如
varchar(20)表示最大可以存放20个字节的内容

区别:
1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;
2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;
3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,
比如GBK,汉字就会占两个字节,英文1个
如果是UTF-8,汉字一般占3个字节,英文还是1个。 
但是一般情况下,我们都认为是两个字节处理,因为oracle安装时候默认我们都选择GBK的编码格式,但是我们在页面做输入字符串长度的校验的时候,还是以数据库设计字段最大长度除3来作为最大长度-----防止数据库移植时设置不同编码格式;
比如:VARCHAR2(10),一般情况下最多存放5个汉字,10个字符

--nvarchar,nvarchar2 
联系:
1.nvarchar/nvarchar2用于存储可变长度的字符串
2.size 的最大值是 4000,而最小值是 1,其值表示字符的个数,而不是字节数
3.这两种类型更适合存储中文

区别:
1.nvarchar中字符为中文则一般按2个字节计算,英文数字等按照一个自己计算
2.nvarchar2中所有字符均按照2个字节计算;
3.nvarchar2虽然更占空间,但是它有更好的兼容性,所有推荐使用;

 

 

【注意】
VARCHAR2是Oracle提供的特定数据类型,Oracle可以保证VARCHAR2在任何版本中该数据类型都可以向上和向下兼容。
VARCHAR在Oracle中不建议使用。

 

具体到NVARCHAR2和VARCHAR2的区别,从使用角度来看区别在于:NVARCHAR2在计算长度时和字符集相关的,例如数据库是中文字符集时以长度10为例,则

 

1、NVARCHAR2(10)是可以存进去10个汉字的,如果用来存英文也只能存10个字符。

 

2、而VARCHAR2(10)的话,则只能存进5个汉字,英文则可以存10个。  

 

VARCHAR2(size)

可变长度的字符串,其最大长度为size个字节;size的最大值是4000,而最小值是1;你必须指定一个VARCHAR2的size;

NVARCHAR2(size)

可变长度的字符串,依据所选的国家字符集,其最大长度为size个字符或字节;size的最大值取决于储存每个字符所需的字节数,其上限为4000;你必须指定一个NVARCHAR2的size;

NUMBER(p,s)

精度为p并且数值范围为s的数值;精度p的范围从1到38;数值范围s的范围是从-84到127;
例如:NUMBER(5,2) 表示整数部分最大3位,小数部分为2位;
NUMBER(5,-2) 表示数的整数部分最大为7其中对整数的倒数2位为0,前面的取整。
NUMBER 表示使用默认值,即等同于NUMBER(5);

LONG

可变长度的字符数据,其长度可达2G个字节;

DATE

有效日期范围从公元前4712年1月1日到公元后4712年12月31日

RAW(size)

长度为size字节的原始二进制数据,size的最大值为2000字节;你必须为RAW指定一个size;

LONG RAW

可变长度的原始二进制数据,其最长可达2G字节;

CHAR(size)

固定长度的字符数据,其长度为size个字节;size的最大值是2000字节,而最小值和默认值是1;

NCHAR(size)

也是固定长度。根据Unicode标准定义

CLOB

一个字符大型对象,可容纳单字节的字符;不支持宽度不等的字符集;最大为4G字节

NCLOB

一个字符大型对象,可容纳单字节的字符;不支持宽度不等的字符集;最大为4G字节;储存国家字符集

BLOB

一个二进制大型对象;最大4G字节

BFILE

包含一个大型二进制文件的定位器,其储存在数据库的外面;使得可以以字符流I/O访问存在数据库服务器上的外部LOB;最大大小为4G字节.

 

blob、clob、nclob 三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB。 LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。 可以执行读取、存储、写入等特殊操作 CLOB(Character Large Object) 用于存储对应于数据库定义的字符集的字符数据。(类似于long类型) BLOB(Binary Large Object) 可用来存储无结构的二进制数据。(类似于row和long row)


2、Oralce中存储字符串的类型包括varchar varchar2 nvarchar2 。nvarchar不是oracle存储字符串的类型

3、varchar varchar2 对应java.sql.types.varchar

     nvarchar2 对应java.sql.types.nvarchar

     其他对应关系见博客http://blog.csdn.net/hbzyaxiu520/article/details/5457225。具体如下:

常见数据库字段类型与java.sql.Types的对应


Oracle与java.sql.Types的对应 


Oracle                                java.sql.Types  


 blob                                     blob
 char                                     char
 clob                                     clob
 date                                    date
 number                               decimal
 long                                     varbinary
 nclob,nvarchar2                   other
 smallint                                smallint
 timestamp                            timstamp
 raw                                      varbinary
 varchar2                               varchar


Sql server与java.sql.Types的对应 


Sql server                           java.sql.Types
   bigint (2005,2008)                bigint
   timstamp,binary                    binary
   bit                                         bit
   char,nchar,unqualified          char
   datetime                               date
   money,smallmoney,decimal  decimal
   float (2005,2008)                  double
   float(2000)                            float
   int                                          integer
   image                                    longvarbinary
   text,ntext,xml                        longvarchar


    numeric                                 numeric
    real                                       real
    smallint                                smallint
    datetime,smalldatetime       timestamp
    tinyint                                  tinyint
    varbinary                             varbinay
    nvarchar,varchar                 varchar


DB2与java.sql.Types的对应 


bigint                                       bigint
   blob                                      blob
   character,graphic                 char
   clob                                      clob
   date                                     date
   decimal                                decimal
   double                                 double
    integer                               integer
    longvargraphic                   longvarchar
    longvarchar


real                                        real
 smallint                                 smallint
 time                                      time
 timestamp                            timestamp
 vargraphic                            varchar
 varchar


MySQL与java.sql.Types的对应 


MySQL                          java.sql.Types
  bigint                              bigint
   tinyblob                         binary
   bit                                  bit
   enum,set,char               char
   date,year                      date
   decimal,numeric            decimal
   double,real                   double
   mediumint,int                integer
   blob,mediumblob           blob
   longblob
   float                               real


smallint                           smallint
   time                             time
   timestamp,datetime     timestamp
   tinyint                           tinyint
   varbinary,binary           varbinay
   varchar,tinytext,text     varchar




Sybase与java.sql.Types的对应 


Sybase                            java.sql.Types
   binary                                 binary
   bit                                       bit
   char,nchar,                            char
   money,smallmoney,decimal    decimal
   float                                     double
    int                                       integer
   image                                    longvarbinary
   text                                      longvarchar
numeric                                   numeric
    real                                     real
    smallint                              smallint
    datetime,smalldatetime     timestamp
    tinyint                                 tinyint
    varbinar,timestamp            varbinay
    nvarchar,varchar ,sysname   varchar



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Python和Java是两种广泛应用于编程领域的高级编程语言,它们各有优劣。本文从程序设计应用、系统资源占用、高性能处理和语言特点等四方面详细介绍两种编程语言的区别。

关键字: python java 高性能处理

在这篇文章中,小编将为大家带来Java接口的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: java 接口 Interface

应该有不少小伙伴有假期打工的经历,那今天就来给公众号的读者朋友们分享一个二哥编程星球里一个球友在富士康打工 50 天的感受,相信大家看完后会深深触动的。

关键字: 物联网 java 博客

在过去的几年中,Python的普及速度令人惊叹,Java的王者地位也常年不衰。目前两者的竞争愈发激烈,怎么选择成为了许多初学者萦绕心中的问题,网上有很多版本的说法牵引着他们的思维,让本来很简单的问题复杂化。

关键字: python java

我们都知道,浏览一个网页,有两个很主要的“电脑”在共同运行,一台是远程的,为你提供网页数据的“服务器”,一台是你正在使用的客户端电脑。

关键字: javascript java

在各种网页制作技术论坛中,常常有人询问javascript与Java有什么区别,甚至有人误认为javascript就是Java。javascript与Java确实有一定的联系,但它们并不像我们想象的那样联系紧密,甚至可以...

关键字: javascript java

对于很多初学者来讲,不太清楚Java和C语言的区别,为了让那个大家更清晰的了解,近日特意给大家归纳了一些两者的大致区别,希望能够给大家带来一定的帮助作用,也欢迎大家进行详细补充和归纳。

关键字: C语言 java

Java封装案例

关键字: java 实例

今天我们就要来讲讲看似线程安全的双重检查锁单例模式中可能会出现的指令重排问题。

关键字: java 单例模式 双重检查锁

今天我们来放松下心情,不聊分布式,云原生,来聊一聊初学者接触的最多的 java web 基础。

关键字: Spring xml java
关闭
关闭