JAVA获取表中某个字段的长度_获取oracle数据库表定义的字段长度并验证数据是否超出长度时需要了解的知识...

本文详细介绍了Oracle数据库中varchar、varchar2、nvarchar2等字符串类型的区别,以及它们在存储数据时的字节计算规则。同时,讨论了如何在JAVA中对应这些字段类型,并提供了数据库字段类型与JAVA.sql.Types的映射关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目上有个问题是需要获取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.youkuaiyun.com/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值