MySqlOracleSqlServer三大数据库的数据类型列表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MySqlOracleSqlServer三大数据库的数据类型列表MySql数据类型
Oracle数据类型
一、概述
在ORACLE8中定义了:标量(SCALAR)、复合(COMPOSITE)、引用(REFERENCE)和LOB四种数据类型,下面详细介绍它们的特性。
二、标量(SCALAR)
合法的标量类型与数据库的列所使用的类型相同,此外它还有一些扩展。
它又分为七个组:数字、字符、行、日期、行标识、布尔和可信。
数字,它有三种差不多类型--NUMBER、PLS_INTEGER和BINARY_INTENER。
NUMBER能够描述整数或实数,而PLS_INTEGER和BINARY_INTENER只能描述整数。
NUMBER,是以十进制格式进行储备的,它便于储备,然而在运算上,系统会自动的将它转换成为二进制进行运算的。
它的定义方式是NUMBER(P,S),P是精度,最大38位,S是刻度范畴,可在-84...127间取值。
例如:NUMBER(5,2)能够用来储备表示-999.99...999.99间的数值。
P、S能够在定义是省略,例如:NUMBER(5)、NUMBER 等;
BINARY_INTENER用来描述不储备在数据库中,然而需要用来运算的带符号的整数值。
它以2的补码二进制形式表述。
循环计数器经常使用这种类型。
PLS_INTEGER和BINARY_INTENER唯独区别是在运算当中发生溢出时,BINARY_INTENER型的变量会被自动指派给一个NUMBER型而可不能出错,PLS_INTEGER型的变量将会发生错误。
字符,包括CHAR、VARCHAR2(VARCHAR)、LONG、NCHAR和NVARCHAR2几种类型。
CHAR,描述定长的字符串,假如实际值不够定义的长度,系统将以空格填充。
它的声明方式如下CHAR(L),L 为字符串长度,缺省为1,作为变量最大32767个字符,作为数据储备在ORACLE8中最大为2000。
VARCHAR2(VARCHAR),描述变长字符串。
它的声明方式如下VARCHAR2(L),L为字符串长度,没有缺省值,作为变量最大32767个字节,作为数据储备在ORACLE8中最大为4000。
在多字节语言环境中,实际储备的字符个数可能小于L值,例如:当语言环境为中文(SIMPLIFIED CHINESE_CHINA.ZHS16GBK)时,一个VARCHAR2(200)的数据列能够储存200个英文字符或者100个汉字字符。
LONG,在数据库储备中能够用来储存高达2G的数据,作为变量,能够表示一个最大长度为32760字节的可变字符串。
NCHAR、NVARCHAR2,国家字符集,与环境变量NLS指定的语言集紧密相关,使用方法和CHAR、VARCHAR2相同。
行,包括RAW和LONG RAW两种类型。
用来储备二进制数据,可不能在字符集间转换。
RAW,类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。
LONG RAW,类似于LONG,作为数据库列最大储备2G字节的数据,作为变量最大32760字节。
日期,只有一种类型--DATE,用来储备时刻信息,站用7个字节(从世纪到秒),绝对没有“千年虫”问题。
行标识,只有一种类型--ROWID,用来储备“行标识符”,能够利用ROWIDTOCHAR函数来将行标识转换成为字符。
布尔,只有一种类型--BOOLEAN,仅仅能够表示TRUE、FALSE或者NULL。
可信,只有一种类型--MLSLABEL,能够在TRUSTED ORACLE中用来储存可变长度的二进制标签。
在标准ORACLE 中,只能储备NULL值。
三、复合(COMPOSITE)
标量类型是通过预定义的,利用这些类型能够衍生出一些复合类型。
要紧有记录、表。
记录,能够看作是一组标量的组合结构,它的声明方式如下:
TYPE record_type_name IS RECORD
( filed1 type1 [NOT NULL] [:=expr1]
.......
filedn typen [NOT NULL] [:=exprn] )
其中,record_type_name是记录类型的名字。
(是不是看着象CREATE TABLE?......)引用时必须定义相关的变量,记录只是TYPE,不是VARIABLE。
表,不是物理储备数据的表,在那个地点是一种变量类型,也称为PL/SQL表,它类似于C语言中的数组,在处理方式上也相似。
它的声明方式如下:
TYPE table_type_name IS TABLE OF scalar_type INDEX BY BINARY_INTENER;
其中,table_type_name是类型的名字,scalar_type是一种标量类型的类型声明。
引用时也必须定义相关的变量。
表和数组不同,表有两列,KEY和VALUE,KEY确实是定义时声明的BINARY_INTENER,VALUE确实是定义时声明的scalar_type。
除了记录和表之外,还有对象类型、集合(嵌套表和VARRAYS)等类型,这些将专门讲解。
四、引用(REFERENCE)
在PL/SQL8.0之前,只有一种类型--REF CURSOR,也确实是游标。
它的定义较为简单,
CURSOR cursor_name IS select .....from.....;
在PL/SQL8.0之后,引入了REF类型,它指向一个对象。
这种类型将单独讲解。
(等我弄明白再说,免得在高人面前......)
五、LOB型
LOB变量要紧是用来储备大量数据的数据库字段,最大能够储备4G字节的内容(这么大,存VCD?,白费!)。
要紧有:
CLOB:和ORACLE7中的LONG类型相似,储备单字节字符数据。
(别用来存中文喔。
)
NCLOB:用来储备定宽多字节字符数据。
(例如:存《啸傲江湖》就挺好)
BLOB:和LONG RAW相似,用来储备无结构的二进制数据。
BFILE:它用来承诺ORACLE对数据库外储备的大型二进制文本进行只读形式的访问。
六、其他
事实上在完成对标量变量的明白得之后,差不多上能够应对C/S模式下的常规数据库应用所需了,后续的类型说实话,我玩了5年ORACLE,都专门少用到。
附:参考书《ORACLE8 PL/SQL程序设计》(《ORACLE8 PL/SQL PROGRAMMING》)ORACLE技术系列丛书机械工业出版社
注:本文所列举的是PL/SQL当中能够定义的数据类型,并不是所有的类型都能够在建表时指定为列的数据类型
SqlServer数据类型
float
浮点数数据,从–1.79E +308 到1.79E+308
储备大小为8 字节。
real
浮点精度数字数据,从–3.40E+38 到3.40E+38。
储备大小为4 字节。
datetime 日期和时刻数据,从1753 年1 月1 日到9999 年12 月31 日,准确度为三百分之一秒或3.33 毫秒。
值被圆整到 .000、.003 或 .007 毫秒增量。
储备为两个4 字节整数。
前4 个字节储备早于或晚于基日期1900 年1 月1 日的天数。
基日期是系统的参照日期。
不承诺datetime 的值早于1753 年1 月1 日。
后4 个字节储备一天之中的具体时刻,被表示为从午夜算起的毫秒数。
秒数的有效范畴是0–59。
national character(n) Synonym:nchar(n) 固定长度的Unicode 数据,最大长度为4000 个字符。
默认长度= 1。
储备大小(以字节计)是输入的字符数的两倍。
national character
varying(n) Synonym:nvarchar(n) 可变长度的Unicode 数据,长度值范畴为从1 到4000 个字符。
默认长度= 1。
储备大小(以字节计)是输入的字符数的两倍。
ntext 可变长度的Unicode 数据,最大长度为(2^30–2)/2 (536,870,911) 个字符。
储备大小(以字节计)是输入的字符数的两倍。
注意:
字符串函数中不再支持ntext。
binary(n)
固定长度的二进制数据,最大长度为8000 字节。
默认长度= 1。
储备大小是固定的,是在类型中声明的以字节为单位的长度。
varbinary(n)
可变长度的二进制数据,最大长度为8000 字节。
默认长度= 1。
储备大小可变。
它表示值的长度(以字节为单位)。
image
可变长度的二进制数据,最大长度为2^30–1 (1,073,741,823) 字节。
储备大小是值的以字节为单位的长度。
uniqueidentifier 全局唯独标识符(GUID)。
储备大小为16 字节。
IDENTITY [(s, i)] 这是数据列的一个属性,而不是一个专门的数据类型。
只有整数数据类型的数据列可用于标识列。
一个表只能有一个标识列。
能够指定种子和增量,但不能更新列。
s (seed) = 起始值
i(increment) = 增量值
SQL 数据类型JAVA数据类型
CHAR String
VARCHAR String
LONGVARCHAR String
NUMERIC java.math.BigDecimal
DECIMAL java.math.BigDecimal
BIT Boolean
TINYINT Byte
SMALLINT Short
INTEGER Int
BIGINT Long
REAL Float
FLOAT Double
DOUBLE Double
BINARY byte[]
VARBINARY byte[]
LONGVARBINARY byte[]
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
JAVA数据类型SQL 数据类型String VARCHAR or LONGVARCHAR java.math.BigDecimal NUMERIC Boolean BIT
Byte TINYINT
Short SMALLINT
Int INTEGER
Long BIGINT
Float REAL
Double DOUBLE
byte[]VARBINARY or LONGVARBINARY
java.sql.Date DATE
java.sql.Time TIME
java.sql.Timestamp TIMESTAMP
那个地点,大伙要注意了,并不是所有的数据类型在各种数据库治理系统中都被支持。
下面,就几种常用的数据类型之间的转化进行说明:
(1)CHAR, VARCHAR, 和 LONGVARCHAR
在SQL语言中,有三种分别表示不同长度的字符类型CHAR, VARCHAR, 和LONGVARCHAR,在Java/Jsp中并没有相应的三种不同的数据类型与之一一对应,JDBC的处理方法是将其与String或者char[]对应起来。
在实际编程中不必对着三种SQL数据类型进行区分,全部将他们转化为Sting或者char[]就能够了。
而且通常使用应用的专门普遍的String类型。
我们还能够利用String类提供的方法将一个String对象转化为char[],或者用char[]为参数构造一个Stirng对象。
关于定长度的SQL数据类型CHAR(n),当从数据库治理系统中获得的结果集提取该类型的数据时,JDBC会为其构造一个长度为n的St ring对象来代表他,假如实际的字符个数不足’n’,系统会自动为String对象补上空格。
当向数据库治理系统写入的数据类型应该是CHAR(n)时,JDBC也会将该String对象的末尾补上相应数量的空格。
一样情形下,CHAR, VARCHAR, LONGVARCHAR和String之间能够无差错的进行转换。
但专门值得注意的是LONGVARCHAR,这种SQL的数据类型有时在数据库中代表的数据可能有几兆字节的大小,超过了String对象的承担范畴。
JDBC解决的方法是用Jav a的Input Stream来同意这种类型的数据[以后我们回涉及到]。
Input Stream不仅支持ASCII,而且支持Unicode,我们能够依照需要进行选择。
(2)DECIMAL 和 NUMERIC
SQL的DECIMAL 和NUMERIC通常用来表示需要一定精度的定点数。
在Java的简单数据类型中,没有一种类型与之相对应。
但从JDK1.1开始,Sun公司在java.math.*包中加入了一个新的类BigDecimal,该类的对象能够与DECIMAL 、NUMERIC进行转换。
另外,当从数据库治理系统中读取数据时,还能够用getString()方法来猎取DECIMAL 和 NUMERIC。
(3)BINARY, VARBINARY, 和 LONGVARBINARY
在编程时无须精确区分这三种SQL数据类型,JDBC将他们统一影射为byte[]。
其中LONGVARBINARY和LONGVARCHAR相似,能够代表几兆字节的数据,超出数组的承担范畴。
解决的方法依旧是用Input Stream来同意数据。
(4)BIT
代表一个二进制位的BIT类型被JDBC影射为boolean型。
(5)TINYINT, SMALLINT, INTEGER, 和 BIGINT
SQL语言的TINYINT, SMALLINT, INTEGER, 和BIGINT分别代表8位、16位、32位、64位的数据。
他们分别被影射为Java的byte, short, int, 和long
(6)REAL, FLOAT, 和DOUBLE
SQL定义了REAL, FLOAT, DOUBLE来支持浮点数。
JDBC将REAL影射到Java的float,将FLOAT,DOUBLE影射到java的dou ble。
(7)DATE, TIME, 和TIMESTAMP
SQL定义了三种和日期相关的数据类型。
DATE代表年、月、日,TIME代表时、分、秒,TIMESTAMP结合了DATE和TIME的全部信息,而且增加了更加精确的时刻计量单位。
在java的标准类库中,java.util.*包中的Date类用来表示日期和时刻。
然而该类和SQL中的DATE, TIME, 和TIMESTAMP直截了当影射关系并不清晰。
同时,该类也不支持TIMESTAMP的精确时刻计量单位。
因此,Sun公司在java.sql.*中为java.util.Date增加了三个子类:java.sql.Date,java.sql.Time ,java.sql.Timestamp,分别与SQL中的三个日期数据类型相对应。