达梦数据库数据类型详解
![]() 常规数据类型字符数据类型CHAR/CHARACTER类型语法: CHAR[(长度)] CHARACTER[(长度)] 功能: CHAR 数据类型指定定长字符串。在基表中,定义 CHAR 类型的列时,可以指定一个不超过 32767 的正整数作为字节长度,例如:CHAR(100)。如果未指定长度,缺省为 1。CHAR 类型列的最大存储长度由数据库页面大小决定,长度不足时,自动填充空格。CHAR 数据类型最大存储长度和页面大小的对应关系请见表1.1.1。但是,在表达式计算中,该类型的长度上限不受页面大小限制,为 32767。 表1.1.1 最大存储长度和页面大小的对应关系
这个限制长度只针对基表中的列,在定义变量的时候,可以不受这个限制长度的限制。 另外,实际插入表中的列长度要受到记录长度的约束,每条记录总长度不能大于页面大小的一半。
VARCHAR/VARCHAR2类型语法: VARCHAR[(长度[CHAR])] 功能: VARCHAR 数据类型指定变长字符串,用法类似 CHAR 数据类型,可以指定一个不超过 32767 的正整数作为字节或字符长度,例如:VARCHAR (100)指定 100 字节长度;VARCHAR(100 CHAR)指定 100 字符长度。如果未指定长度,缺省为 8188 字节。 在基表中,当没有指定 USING LONG ROW 存储选项时,插入 VARCHAR 数据类型的实际最大存储长度由数据库页面大小决定;如果指定了USING LONG ROW 存储选项,则插入 VARCHAR 数据类型的长度不受数据库页面大小限制。VARCHAR 类型在表达式计算中的长度上限不受页面大小限制,为 32767。 CHAR 同 VARCHAR 的区别在于前者长度不足时,系统自动填充空格,而后者只占用实际的字节空间。另外,实际插入表中的列长度要受到记录长度的约束,每条记录总长度不能大于页面大小的一半。 该数据类型存储的数据量受到LENGTH_IN_CHAR和CHARSET参数的影响。根据数据库初始化时的参数不同,VARCHAR中能存储的汉字个数不同。主要由如下 2 个参数决定: UNICODE_FALG:表示数据库中数据的字符集。可用 select unicode 来查询当前数据库的字符集种类,0 代表 gb18030;1 代表 UTF-8。 LENGTH_IN_CHAR:决定数据库中 VARCHAR 类型对象的长度是否以字符为单位。取值为 1 表示以字符为单位,将存储长度值按照理论字符长度进行放大。取值为 0 则所有 VARCHAR 以字节为单位。 VARCHAR2 类型和 VARCHAR 类型用法相同。 ROWID类型语法: ROWID 功能: ROWID 类型数据由 18 位字符组成,用来表示 ROWID 数据。18 位字符由“4 位站点号+6 位分区号+8 位物理行号”组成。ROWID 类型数据可通过 SF_BUILD_ROWID()构造而来。 表中的 ROWID 类型列,可以用于排序或创建索引。但是 ROWID 类型不支持作为分区列和自定义类型的属性数据类型。ROWID 列与字符类型一样,支持 MAX,MIN 等集函数,不支持 SUM,AVG 等集函数。 例 创建一个含有 ROWID 类型的数据库表。 先构造 ROWID 数据。假定站点号为 1,分区号为 2,物理行号为 50。使用SF_BUILD_ROWID 函数构造出一个 ROWID 类型数据。
其中,AAAB 为站点号、AAAAAC 为分区号、AAAAAAAy 为 ROWID 值。 创建含有 ROWID 类型的表,并插入数据。
数值数据类型精确数值数据类型NUMERIC/DECIMAL/DEC/NUMBER类型NUMERIC/NUMBER/DECIMAL/DEC[( 精度 [, 标度])] 功能: NUMERIC数据类型用于存储零、正负定点数。其中:精度是一个无符号整数,定义了总的数字数,精度范围是1至38。标度定义了小数点右边的数字位数。一个数的标度不应大于其精度,如果实际标度大于指定标度,那么超出标度的位数将会四舍五入省去。例如:NUMERIC(4,1)定义了小数点前面3位和小数点后面1位,共4位的数字,范围在-999.9到999.9。所有NUMERIC数据类型,如果其值超过精度,DM会返回一个出错信息,如果超过标度,则多余的位会被截断。 如果不指定精度和标度,缺省精度为38,标度无限定。
INTEGER/INT类型语法:INTEGER/INT 功能:用于存储有符号整数,精度为 10,标度为 0。取值范围为:-2147483648 (-2^31)~+2147483647(2^31-1)。
BIGINT类型语法:BIGINT 功 能 : 用 于 存 储 有 符 号 整 数 , 精 度 为 19 , 标 度 为 0 。 取 值 范 围 为 :-9223372036854775808(-2^63)~9223372036854775807(2^63-1)。 TINYINT/BYTE类型语法:TINYINT 功能:用于存储有符号整数,精度为 3,标度为 0。取值范围为:-128~+127。 语法:BYTE 功能:与 TINYINT 相似,精度为 3,标度为 0。 SMALLINT类型语法:SMALLINT 功 能 : 用 于 存 储 有 符 号 整 数 , 精 度 为 5 , 标 度 为 0 。 取 值 范 围 为 :-32768(-2^15)~+32767(2^15-1)。 BINARY类型语法: BINARY[(长度 )] 功能: BINARY 数据类型指定定长二进制数据。缺省长度为 1 个字节,最大长度由数据库页面大小决定,具体可参考《DM8_SQL 语言使用手册》1.4.1 节。BINARY 常量以 0x 开始,后跟数据的十六进制表示,例如 0x2A3B4058。
VARBINARY/RAW类型语法: VARBINARY[(长度)] RAW[(长度)] 功能:VARBINARY 数据类型用来存储变长二进制数据,用法类似 BINARY 数据类型,可以指定一个不超过 32767 的正整数作为数据长度。缺省长度为 8188 个字节。VARBINARY数据类型的实际最大存储长度由数据库页面大小决定,具体最大长度算法与 VARCHAR 类型的相同,其在表达式计算中的长度上限也与 VARCHAR 类型相同,为 32767。 近似数值数据类型FLOAT类型语法:FLOAT[(精度)] 功能:FLOAT 是带二进制精度的浮点数,精度范围(1~126)。当精度小于等于 24 时,DM 将其转换为标准 C 语言中的 REAL 类型;当精度大于 24 时,转换为标准 C 语言中的DOUBLE 类型。 FLOAT 取值范围-1.7*10^308~1.7*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,可以用来支持 ODBC 和 JDBC 的布尔数据类型。DM 的 BIT 类型与 SQL SERVER2000 的 BIT 数据类型相似。功能与 ODBC 和 JDBC 的 BOOL 相同。
日期时间数据类型一般日期时间数据类型DATE类型语法: DATE 功能: DATE 类型包括年、月、日信息,定义了’-4712-01-01’和’9999-12-31’之间任何一个有效的格里高利日期。
TIME类型语法: TIME[(小数秒精度)] 功能: TIME 类型包括时、分、秒信息,定义了一个在’00:00:00.000000’和’23:59:59.999999’之间的有效时间。TIME 类型的小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如果未定义,缺省精度为 0。
TIMESTAMP类型语法: TIMESTAMP[(小数秒精度)] DATETIME[(小数秒精度)] 功能: TIMESTAMP/DATETIME 类型包括年、月、日、时、分、秒信息,定义了一个在’-4712-01-0100:00:00.000000’和’9999-12-31 23:59:59.999999’之间的有效格里高利日期时间。小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如果未定义,缺省精度为 6。与 DATE 类型相同,DM 不计算'1582-10-05'到'1582-10-14'之间的 10 天。 TIMESTAMP 值的书写方式有两种:一是 TIMESTAMP'<DATE 值> <TIME 值>';二是'<DATE 值> <TIME 值>'。语法中,TIMESTAMP 也可以写为 DATETIME。
时间间隔数据类型年-月间隔类INTERVAL YEAR TO MONTH 类型语法:INTERVAL YEAR[(引导精度)]TO MONTH 功能:描述一个若干年若干月的间隔,引导精度规定了年的取值范围。引导精度取值范围为 1~9,如果未定义,缺省精度为 2。月的取值范围在 0 到 11 之间。例如:INTERVAL YEAR(4) TO MONTH,其中 YEAR(4)表示年的精度为 4,表示范围为负 9999 年零 11 月到正 9999 年零 11 月。一个合适的字值例子是:INTERVAL '0015-08' YEAR TO MONTH。 INTERVAL YEAR 类型语法:INTERVAL YEAR[(引导精度)] 功能:描述一个若干年的间隔,引导精度规定了年的取值范围。引导精度取值范围为1~9, 如果未定义,缺省精度为 2。例如:INTERVAL YEAR(4),其中 YEAR(4)表示年的精度为 4, 表示范围为负 9999 年到正 9999 年。一个合适的字值例子是:INTERVAL '0015' YEAR。 INTERVAL MONTH 类型语法:INTERVAL MONTH[(引导精度)] 功能:描述一个若干月的间隔,引导精度规定了月的取值范围。引导精度取值范围为1~9,如果未定义,缺省精度为 2。例如:INTERVAL MONTH(4),其中 MONTH(4)表示月的精度为 4,表示范围为负 9999 月到正 9999 月。一个合适的字值例子是:INTERVAL '0015' MONTH。 日-时间隔类INTERVAL DAY 类型语法:INTERVAL DAY[(引导精度)] 功能:描述一个若干日的间隔,引导精度规定了日的取值范围。引导精度取值范围为1~9,如果未定义,缺省精度为 2。例如:INTERVAL DAY(3),其中 DAY (3)表示日的精度为 3,表示范围为负 999 日到正 999 日。一个合适的字值例子是:INTERVAL '150' DAY。 INTERVAL DAY TO HOUR 类型语法:INTERVAL DAY[(引导精度)] TO HOUR 功能:描述一个若干日若干小时的间隔,引导精度规定了日的取值范围。引导精度取值范围为 1~9,如果未定义,缺省精度为 2。而时的取值范围在 0 到 23 之间。例如:INTERVAL DAY(1) TO HOUR,其中 DAY(1)表示日的精度为 1,表示范围为负 9 日零 23 小时到正9日零 23 小时。一个合适的字值例子是:INTERVAL '9 23' DAY TO HOUR。 INTERVAL DAY TO MINUTE 类型语法:INTERVAL DAY[(引导精度)] TO MINUTE 功能:描述一个若干日若干小时若干分钟的间隔,引导精度规定了日的取值范围。引导精度取值范围为 1~9,如果未定义,缺省精度为 2。而小时的取值范围在 0 到 23 之间,分钟的取值范围在 0 到 59 之间。例如:INTERVAL DAY(2) TO MINUTE,其中 DAY(2)表示日的精度为 2,表示范围为负 99 日零 23 小时零 59 分到正 99 日零 23 小时零 59 分。一个合适的字值例子是:INTERVAL '09 23:12' DAY TO MINUTE。 INTERVAL DAY TO SECOND 类型语法:INTERVAL DAY[(引导精度)] TO SECOND [(小数秒精度)] 功能:描述一个若干日若干小时若干分钟若干秒的间隔,引导精度规定了日的取值范围。引导精度取值范围为 1~9,如果未定义,缺省精度为 2。小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如果不定义小数秒精度默认精度为 6。小时的取值范围在0到 23 之间,分钟的取值范围在 0 到 59 之间。例如:INTERVAL DAY(2) TO SECOND(1),其中 DAY(2)表示日的精度为 2,SECOND(1)表示秒的小数点后面取 1 位,表示范围为负99 日零 23 小时零 59 分零 59.9 秒到正 99 日零 23 小时零 59 分零 59.9 秒。一个合适的字值例子是:INTERVAL '09 23:12:01.1' DAY TO SECOND。 INTERVAL HOUR 类型语法:INTERVAL HOUR[(引导精度)] 功能:描述一个若干小时的间隔,引导精度规定了小时的取值范围。引导精度取值范围为 1~9,如果未定义,缺省精度为 2。例如:INTERVAL HOUR(3),其中 HOUR (3)表示时的精度为 3,表示范围为负 999 小时到正 999 小时。例如:INTERVAL '150' HOUR。 INTERVAL HOUR TO MINUTE 类型语法:INTERVAL HOUR[(引导精度)] TO MINUTE 功能:描述一个若干小时若干分钟的间隔,引导精度规定了小时的取值范围。引导精度取值范围为 1~9,如果未定义,缺省精度为 2。而分钟的取值范围在 0 到 59 之间。例如:INTERVAL HOUR(2) TO MINUTE,其中 HOUR(2)表示小时的精度为 2,表示范围为负99小时零 59 分到正 99 小时零 59 分。一个合适的字值例子是:INTERVAL '23:12' HOUR TO MINUTE。 INTERVAL HOUR TO SECOND 类型语法:INTERVAL HOUR[(引导精度)] TO SECOND [(小数秒精度)] 功能:描述一个若干小时若干分钟若干秒的间隔,引导精度规定了小时的取值范围。引导精度取值范围为 1~9,如果未定义,缺省精度为 2。小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如果未定义,缺省精度为 6。分钟的取值范围在 0 到 59 之间。例如:INTERVAL HOUR(2) TO SECOND(1),其中 HOUR(2)表示小时的精度为 2,SECOND(1)表示秒的小数点后面取 1 位,表示范围为负 99 小时零 59 分零 59.9 秒到正99小时零 59 分零 59.9 秒。一个合适的字值例子是:INTERVAL '23:12:01.1' HOUR TO SECOND。 INTERVAL MINUTE 类型语法:INTERVAL MINUTE[(引导精度)] 功能:描述一个若干分钟的间隔,引导精度规定了分钟的取值范围。引导精度取值范围为 1~9,如果未定义,缺省精度为 2。例如:INTERVAL MINUTE(3),其中 MINUTE(3)表示分钟的精度为 3,表示范围为负 999 分钟到正 999 分钟。一个合适的字值例子是:INTERVAL '150' MINUTE。 INTERVAL MINUTE TO SECOND 类型语法:INTERVAL MINUTE[(引导精度)] TO SECOND [(小数秒精度)] 功能:描述一个若干分钟若干秒的间隔,引导精度规定了分钟的取值范围。引导精度取值范围为 1~9,如果未定义,缺省精度为 2。小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如果未定义,缺省精度为 6。例如:INTERVAL MINUTE(2) TO SECOND(1),其中 MINUTE(2)表示分钟的精度为 2,SECOND(1)表示秒的小数点后面取 1 位,表示范围为负 99 分零 59.9 秒到正 99 分零 59.9 秒。一个合适的字值例子是:INTERVAL '12:01.1' MINUTE TO SECOND。 INTERVAL SECOND 类型语法:INTERVAL SECOND[(引导精度 [,小数秒精度] )] 功能:描述一个若干秒的间隔,引导精度规定了秒整数部分的取值范围。引导精度取值范围为 1~9,如果未定义,缺省精度为 2。小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如果未定义,缺省精度为 6。例如:INTERVAL SECOND(2,1),表示范围为负 99.9 秒到正 99.9 秒。一个合适的字值例子是:INTERVAL '51.1' SECOND。 时区数据类型标准时区类型TIME WITH TIME ZONE 类型语法: TIME[(小数秒精度)]WITH TIME ZONE 功能: 描述一个带时区的 TIME 值,其定义是在 TIME 类型的后面加上时区信息。时区部分的实质是 INTERVAL HOUR TO MINUTE 类型,取值范围:-12:59 与 +14:00 之间。例如:TIME ‘09:10:21 +8:00’。
TIMESTAMP WITH TIME ZONE 类型语法: TIMESTAMP[(小数秒精度)]WITH TIME ZONE 功能: 描述一个带时区的 TIMESTAMP 值,其定义是在 TIMESTAMP 类型的后面加上时区信息。时区部分的实质是 INTERVAL HOUR TO MINUTE 类型,取值范围:-12:59 与 +14:00 之间。例如:’2009-10-11 19:03:05.0000 -02:10’。
本地时区类型TIMESTAMP WITH LOCAL TIME ZONE 类型语法: TIMESTAMP[(小数秒精度)]WITH LOCAL TIME ZONE 功能: 描述一个本地时区的 TIMESTAMP 值,能够将标准时区类型 TIMESTAMP WITH TIME ZONE 类型转化为本地时区类型,如果插入的值没有指定时区,则默认为本地时区。
多媒体数据类型TEXT/LONG/LONGVARCHAR/CLOB类型语法: TEXT LONG LONGVARCHAR CLOB 功能: 变长字符串类型,其字符串的长度最大为 100G-1,可用于存储长的文本串。
IMAGE/LONGVARBINARY类型语法: IMAGE LONGVARBINARY 功能: 可用于存储多媒体信息中的图像类型。图像由不定长的象素点阵组成,长度最大为 100G-1 字节。该类型除了存储图像数据之外,还可用于存储任何其它二进制数据。 BLOB类型语法: BLOB 功能: BLOB 类型用于指明变长的二进制大对象,长度最大为 100G-1 字节。 BFILE类型语法: BFILE 功能: BFILE 用于指明存储在操作系统中的二进制文件,文件存储在操作系统而非数据库中,仅能进行只读访问。
参考文档:
将SQLServer数据类型转换为C#.Net类型 将SQLServer数据类型转换为.Net中SqlDbType类型 企业版V4.0 - 支持MSSQL、MySQL、Oracle三种类型的数据库 跨模块打开窗体,支持传入参数加载不同类型的数据 CS开发框架对大并发大数据量以及多数据库的支持方案是怎样的? 开发框架旗舰版V5支持制单人多选查询以及组织架构权限查询数据 DbDataUpdate - 自动提交对象模型数据 - 常用数据类型测试 MsSQL/MySQL/Oracle三种常用数据库数据类型(Data Type)对应关系表 C#.NET数据类型(Type)与DbType的对应关系 DbType与C#.NET数据类型(Type)对应关系 MsSql数据类型(SqlDbType)与.NET类型(Type)对应关系 SQL Server 数据类型对应.NET类型的EF模型定义|C/S开发框架 CSFramework.EF数据库框架 - 特殊数据类型测试报告(_TestDataUpdate表) EF报错:从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值|C/S开发框架 SqlServer数据类型、DbType类型、.NET类型与达梦数据类型关系表|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |