DM数据类型
# DM 数据类型
# 一、常规数据类型
# 1、字符数据类型
# CHAR
类型
语法:CHAR[(长度)]
功能:CHAR
数据类型指定定长字符串。
在基表中,
- 定义
CHAR
类型的列时,可以指定一个不超过 32767 的正整数作为字节长度,例如:CHAR(100)
。 - 如果未指定长度,缺省为 1。
- CHAR 类型列的最大存储长度由数据库页面大小决定,
CHAR
数据类型最大存储长度和页面大小的对应关系请见下表 1.4.1。 - 但是,在表达式计算中,该类型的长度上限不受页面大小限制,为 32767。
表1.4.1 最大存储长度和页面大小的对应关系
数据库页面大小 | 实际最大长度 |
---|---|
4K | 1900 |
8K | 3900 |
16K | 8000 |
32K | 16000 |
# CHARACTER
类型
语法:CHARACTER[(长度)]
功能:与 CHAR
相同。
# VARCHAR
/ VARCHAR2
类型
语法:VARCHAR[(长度 [CHAR])]
功能:VARCHAR
数据类型指定变长字符串,用法类似 CHAR
数据类型,可以指定一个不超过 32767 的正整数作为字节或字符长度,例如:
VARCHAR (100)
指定 100 字节长度;VARCHAR(100 CHAR)
指定 100 字符长度。- 如果未指定长度,缺省为 8188 字节。
区别:
CHAR
同VARCHAR
的区别在于前者长度不足时,系统自动填充空格,而后者只占用实际的字节空间。- 另外,实际插入表中的列长度要受到记录长度的约束,每条记录总长度不能大于页面大小的一半。
# ROWID
类型
语法:ROWID
功能:
ROWID
类型数据由 18 位字符组成,用来表示ROWID
数据。- 18 位字符由 “4 位站点号 +6 位分区号 +8 位物理行号” 组成。
ROWID
类型数据可通过SF_BUILD_ROWID()
构造而来。- 表中的
ROWID
类型列,可以用于排序或创建索引。 - 但是
ROWID
类型不支持作为分区列和自定义类型的属性数据类型。 ROWID
列与字符类型一样,支持MAX
,MIN
等集函数,不支持SUM
,AVG
等集函数。
# 2、数值数据类型
# (1)精确数值数据类型
# NUMERIC
类型
语法:NUMERIC[(精度 [, 标度])]
功能:
NUMERIC
数据类型用于存储零、正负定点数。
其中:
精度
是一个无符号整数,定义了总的数字数,精度范围是 1 至 38。标度
定义了小数点右边的数字位数。一个数的标度不应大于其精度,如果实际标度大于指定标度,那么超出标度的位数将会四舍五入省去。- 例如:
NUMERIC(4,1)
定义了小数点前面 3 位和小数点后面 1 位,共 4 位的数字,范围在-999.9
到999.9
。
所有 NUMERIC
数据类型,
- 如果其值超过精度,DM 会返回一个出错信息,
- 如果超过标度,则多余的位会被截断。
- 如果不指定精度和标度,缺省精度由
INI
参数DECIMAL_ENHANCED
决定,标度不应大于其精度。 - 当
DECIMAL_ENHANCED=1
,缺省精度为 40; - 当
DECIMAL_ENHANCED=0
,缺省精度为 38。
# DECIMAL
类型
语法:DECIMAL[(精度 [, 标度])]
功能:与 NUMERIC
相似。
# DEC
类型
语法:DEC[(精度[, 标度])]
功能:与 DECIMAL
相同。
# NUMBER
类型
语法:NUMBER[(精度[, 标度])]
功能:与 NUMERIC
相同。
# INTEGER
类型
语法:INTEGER
功能:
用于存储有符号整数,精度为 10,标度为 0。
取值范围为:
-2147483648 (-2^31)
~+2147483647(2^31-1)
。int
- 4 字节,4 * 8 = 32
# INT
类型
语法:INT
功能:与 INTEGER
相同。
# BIGINT
类型
语法:BIGINT
功能:
- 用于存储有符号整数,精度为 19,标度为 0。
- 取值范围为:
-9223372036854775808(-2^63)
~9223372036854775807(2^63-1)
。 bigint
- 8 字节,8 * 8 = 64
# TINYINT
类型
语法:TINYINT
功能:
- 用于存储有符号整数,精度为 3,标度为 0。
- 取值范围为:
-128(-2^7)
~+127(2^7)
。 tinyint
- 1 字节,1 * 8 = 8
# BYTE
类型
语法:BYTE
功能:
- 与
TINYINT
相似,精度为 3,标度为 0。
# SMALLINT
类型
语法:SMALLINT
功能:
- 用于存储有符号整数,精度为 5,标度为 0。
- 取值范围为:
-32768(-2^15)
~+32767(2^15-1)
。 smallint
- 2 字节,2 * 8 = 16
# BINARY
类型
语法:BINARY[(长度)]
功能:
BINARY
数据类型用来存储定长二进制数据。
在基表中,
- 定义
BINARY
类型的列时,其最大存储长度由数据库页面大小决定,可以指定一个不超过其最大存储长度的正整数作为列长度。 - 缺省长度为 1 个字节。
- 最大存储长度见【上表 1.4.1】。
BINARY
类型在表达式计算中的长度上限为 32767。BINARY
常量以0x
开始,后面跟着数据的十六进制表示,例如:0x2A3B4058。
# VARBINARY
类型
语法:VARBINARY[(长度)]
功能:
VARBINARY
数据类型用来存储变长二进制数据,用法类似BINARY
数据类型,可以指定一个不超过 32767 的正整数作为数据长度。- 缺省长度为 8188 个字节。
VARBINARY
数据类型的实际最大存储长度由数据库页面大小决定,具体最大长度算法与VARCHAR
类型的相同,其在表达式计算中的长度上限也与VARCHAR
类型相同,为 32767。
# RAW
类型
语法:RAW[(长度)]
功能:
- 与
VARBINARY
相同。
# (2)近似数值数据类型
# FLOAT
类型
语法:FLOAT[(精度)]
功能:
FLOAT
是带二进制精度的浮点数,精度范围(1~126)。- 当精度小于等于 24 时,DM 将其转换为标准 C 语言中的
REAL
类型; - 当精度大于 24 时,转换为标准 C 语言中的
DOUBLE
类型。 FLOAT
取值范围-1.7976931348623158*10^308
~1.7976931348623158*10^308
。
# DOUBLE
类型
语法:DOUBLE[(精度)]
功能:
DOUBLE
是带二进制精度的浮点数。DOUBLE
类型的设置是为了移植的兼容性。- 该类型直接使用标准 C 语言中
DOUBLE
。 - 精度与取值范围与
FLOAT
一样。
# REAL
类型
语法:REAL
功能:
REAL
是带二进制精度的浮点数。- 但它不能由用户指定使用的精度,系统指定其二进制精度为 24,十进制精度为 7。
- 取值范围
-3.4*10^38
~3.4*10^38
。
# DOUBLE PRECISION
类型
语法:DOUBLE PRECISION[(精度)]
功能:
- 该类型指明双精度浮点数。
DOUBLE PRECISION
类型的设置是为了移植的兼容性。- 该类型直接使用标准 C 语言中
DOUBLE
。 - 精度与取值范围与
FLOAT
一样。
# 二、位串数据类型
# BIT
类型
语法:BIT
功能:
BIT
类型用于存储整数数据1、0 或 NULL
,只有 0 才转换为假,其他非空、非 0 值都会自动转换为真,可以用来支持 ODBC 和 JDBC 的布尔数据类型。- DM 的
BIT
类型与 SQL SERVER2000 的BIT
数据类型相似。 - 功能与 ODBC 和 JDBC 的
BOOL
相同。
# 三、日期时间数据类型
日期时间数据类型分为一般日期时间数据类型、时间间隔数据类型和时区数据类型三类,用于存储日期、时间和它们之间的间隔信息。
# 1、一般日期时间数据类型
# DATE
类型
语法:DATE
功能:
DATE
类型包括年、月、日信息,定义了'-4712-01-01'
和'9999-12-31'
之间任何一个有效的格里高利日期。- DM 支持儒略历,并考虑了历史上从儒略历转换至格里高利日期时的异常,将
'1582-10-05'
到'1582-10-14'
之间的日期统一当做'1582-10-15'
处理。
DATE
值的书写方式有两种:一是 DATE '年月日'
;二是 '年月日'
。
其中,年月日之间可以使用分隔符或者没有分隔符。
分隔符是指除 大小写字母
、数字
以及 双引号
之外的所有 单字节字符
且是可打印的。
例如:空格
、回车键
、tab 键
、-
、/
、,
、.
、 :
、*
等标点符号。
年月日中第一个非 0 数值前的 0 亦可省略,例如:'0001-01-01'
等价于 '1-1-1'
。
例如:
CREATE TABLE T2(C1 DATE,C2 DATE,C3 DATE );
INSERT INTO T2 VALUES(DATE '1999-10-01','1999/10/01','1999.10.01');
2
3
# TIME
类型
语法:TIME[(小数秒精度)]
功能:
TIME
类型包括时、分、秒信息,定义了一个在'00:00:00.000000'
和'23:59:59.999999'
之间的有效时间。TIME
类型的小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如果未定义,缺省精度为 0。
TIME 值的书写方式有两种:一是 TIME '时:分:秒'
;二是 '时:分:秒'
。
例如:
CREATE TABLE T2(C1 TIME(2),C2 TIME,C3 TIME);
INSERT INTO T2 VALUES(TIME '09:10:21.20','09:10:21','9:10:21.49');
2
3
# TIMESTAMP
类型
语法:TIMESTAMP[(小数秒精度)]
功能:
TIMESTAMP
类型包括年、月、日、时、分、秒信息,定义了一个在'-4712-01-01 00:00:00.000000000'
和'9999-12-31 23:59:59.999999999'
之间的有效格里高利日期时间。TIMESTAMP
类型的小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~9,如果未定义,缺省精度为 6。- 与 DATE 类型相同,DM 不计算
'1582-10-05'
到'1582-10-14'
之间的 10 天。
TIMESTAMP
值的书写方式有两种:一是 TIMESTAMP' <DATE 值 > <TIME 值 >'
;二是 '<DATE 值 > <TIME 值 >'
。
语法中,TIMESTAMP
也可以写为 DATETIME
。
例如:
CREATE TABLE T2(C1 TIMESTAMP,C2 DATETIME,C3 TIMESTAMP,C4 DATETIME,C5 TIMESTAMP);
INSERT INTO T2 VALUES(TIMESTAMP '2002-12-12 09:10:21',TIMESTAMP '2002-12-12 09:10:21','2002/12/12 09:10:21','2002.12.12 09:10:21',DATETIME'2002-12-12 09:10:21' );
2
3
# 2、时间间隔数据类型
DM 支持两类十三种时间间隔类型:
两类是:年-月间隔类
和 日-时间隔类
,它们通过时间间隔限定符区分,前者结合了日期字段年和月,后者结合了时间字段日、时、分、秒。由时间间隔数据类型所描述的值总是有符号的。
需要说明的是,使用时间间隔数据类型时,如果使用了其引导精度的默认精度,要注意保持精度匹配,否则会出现错误。如果不指定精度,那么将使用默认精度。
# 3、时区数据类型
DM 支持两种时区类型:标准时区类型
和 本地时区类型
。
# 四、多媒体数据类型
多媒体数据类型的字值有两种格式:
- 一是
字符串
,例如:'ABCD'
, - 二是
BINARY
,例如:0x61626364
。
注意:
TEXT
、LONG
、LONGVARCHAR
、CLOB
只支持字符串。BFILE
不适用上面两种格式。BFILE
指明的文件只能只读访问。BINARY
格式的多媒体数据类型以及BFILE
数据类型不支持比较。- 不支持为多媒体数据类型的字段指定精度。
# TEXT
类型
语法:TEXT
功能:
TEXT
为变长字符串类型。- 其字符串的长度最大为
100G-1
字节。 - DM 利用它存储长的文本串。
# LONG
、LONGVARCHAR
(又名 TEXT
)类型
语法:LONG/LONGVARCHAR
功能:与 TEXT
相同。
# IMAGE
类型
语法:IMAGE
功能:
IMAGE
用于指明多媒体信息中的图像类型。- 图像由不定长的象素点阵组成,长度最大为
100G-1
字节。 - 该类型除了存储图像数据之外,还可用于存储任何其它二进制数据。
# LONGVARBINARY
(又名 IMAGE
)类型
语法:LONGVARBINARY
功能:与 IMAGE
相同。
# BLOB
类型
语法:BLOB
功能:
BLOB
类型用于指明变长的二进制大对象,长度最大为100G-1
字节。
# CLOB
类型
语法:CLOB
功能:
- 与
TEXT
相同。
# BFILE
类型
语法:BFILE
功能:
BFILE
用于指明存储在操作系统中的二进制文件,- 文件存储在操作系统而非数据库中,
- 仅能进行只读访问。