达梦数据库数据类型及特点


一、实验要求

本章节主要介绍 DM 数据库支持的常规数据类型。DM SQL 程序支持所有的 DM SQL 数据类型,包括:精确数值数据类型、近似数值数据类型、字符数据类型、多媒体数据类型、一般日期时间数据类型、时间间隔数据类型。此外,DM SQL 还扩展支持了 %TYPE、%ROWTYPE、记录类型、数组类型、集合类型和类类型,用户还可以定义自己的子类型。
本实验要求了解各数据类型的数值范围和应用场景。

二、功能描述及使用

1 数值数据类型

1.1 NUMERIC/NUMBER/DECIMAL/DEC

语法: NUMERIC/NUMBER/DECIMAL/DEC[( 精度 [, 标度])]
说明:
NUMERIC/NUMBER/DECIMAL/DEC数据类型用于存储零、正负定点数。其中:精度是一个无符号整数,定义了总的数字数,精度范围是 1~38,标度定义了小数点右边的数字位数,定义时如省略精度,则缺省是 16。如省略标度,则缺省为 0。一个数的标度不应大于其精度。
如果不指定精度和标度,缺省精度为 38。
以NUMERIC为例:NUMERIC(4,1)定义了小数点前面 3 位和小数点后面 1 位,共 4 位的数字,范围在-999.9 到 999.9。所有 NUMERIC 数据类型,如果其值超过精度,达梦数据库返回一个出错信息,如果超过标度,则多余的位截断。
举例:

CREATE TABLE S1.T1 (num NUMERIC(4,1));
INSERT INTO S1.T1 VALUES(1.2345678);COMMIT;
INSERT INTO S1.T1 VALUES(1.5);COMMIT;
INSERT INTO S1.T1 VALUES(1.59);COMMIT;
INSERT INTO S1.T1 VALUES(1);COMMIT;
INSERT INTO S1.T1 VALUES(999.9);COMMIT;
INSERT INTO S1.T1 VALUES(-999.9);COMMIT;
INSERT INTO S1.T1 VALUES(0);COMMIT;
SELECT * FROM S1.T1;

在这里插入图片描述

1.2 BIT类型

语法:
BIT
说明:
BIT 类型用于存储整数数据 1、0 或 NULL,可以用来支持 ODBC 和 JDBC 的布尔数据类型。DM 的 BIT 类型与 SQL SERVER2000 的 BIT 数据类型相似。功能与 ODBC 和 JDBC 的 BOOL 相同。
举例:

CREATE TABLE S1.T2 (num BIT);
INSERT INTO S1.T2 VALUES(1);COMMIT;
INSERT INTO S1.T2 VALUES(0);COMMIT;
INSERT INTO S1.T2 VALUES(NULL);COMMIT;
SELECT * FROM S1.T2;

在这里插入图片描述

1.3 INTEGER/INT/PLS_INTEGER类型

语法:
INTEGER
INT
说明:
用于存储有符号整数,精度为 10,标度为 0。取值范围为:-2147483648(-231)~+2147483647(231-1)。
举例:

CREATE TABLE S1.T3 (num INT);
INSERT INTO S1.T3 VALUES(123456);COMMIT;
INSERT INTO S1.T3 VALUES(-123456);COMMIT;
INSERT INTO S1.T3 VALUES(0);COMMIT;
INSERT INTO S1.T3 VALUES(-0);COMMIT;
INSERT INTO S1.T3 VALUES(1.11111);COMMIT;
INSERT INTO S1.T3 VALUES(1.9);COMMIT;
SELECT * FROM S1.T3;

在这里插入图片描述

1.4 TINYINT 类型

语法:
TINYINT
说明:
用于存储有符号整数,精度为 3,标度为 0。取值范围为:-128(-27)~+127(-27-1)。
举例:

1.5 SMALLINT 类型

语法:
SMALLINT
说明:
用于存储有符号整数,精度为 5,标度为 0。取值范围为:-32768(-2^15)~ +32767(2^15-1)。
举例:

1.6 BIGINT 类型

语法:
BIGINT
说明:
用于存储有符号整数,精度为 19,标度为 0。取值范围为:-9223372036854775808(-263)~+9223372036854775807(263-1)。
举例:

1.7 BINARY 类型

语法:
BINARY[(长度 )]
说明:
BINARY 数据类型指定定长二进制数据。缺省长度为 1 个字节,最大长度由数据库页面大小决定,具体可参考《DM8_SQL 语言使用手册》1.4.1 节。BINARY 常量以 0x 开始,后跟数据的十六进制表示,例如 0x2A3B4058。
举例:
由于1字节=2^8=256,用十六进制表示为2位,所以BINARY显示为0x+2位16进制数,范围为00-FF(0-255);如果超过255,将继续从0开始循环。

CREATE TABLE S1.T4 (num BINARY(1));
INSERT INTO S1.T4 VALUES(1);COMMIT;
INSERT INTO S1.T4 VALUES(255);COMMIT;
INSERT INTO S1.T4 VALUES(256);COMMIT;
INSERT INTO S1.T4 VALUES(257);COMMIT;
SELECT * FROM S1.T4;

在这里插入图片描述

1.8 VARBINARY 类型

语法:
VARBINARY[(长度 )]
说明:
VARBINARY 数据类型指定变长二进制数据,用法类似 BINARY 数据类型,可以指定一个正整数作为数据长度。缺省长度为 8188 个字节,最大长度由数据库页面大小决定,具体可参考《DM8_SQL 语言使用手册》1.4.1 节。
举例: 参考VARBINARY

1.9 REAL 类型

语法:
REAL
说明:
REAL 是带二进制的浮点数,但它不能由用户指定使用的精度,系统指定其二进制精度为 24,十进制精度为 7。取值范围-3.4E+38~3.4E + 38。
举例:

CREATE TABLE S1.T6 (num REAL);
INSERT INTO S1.T6 VALUES(1);COMMIT;
INSERT INTO S1.T6 VALUES(0);COMMIT;
INSERT INTO S1.T6 VALUES(0.555555555555555555555555);COMMIT;
INSERT INTO S1.T6 VALUES(1.555555555555555555555555);COMMIT;
INSERT INTO S1.T6 VALUES(1e3);COMMIT;
INSERT INTO S1.T6 VALUES(3.4E38);COMMIT;
INSERT INTO S1.T6 VALUES(34000000000000);COMMIT;
INSERT INTO S1.T6 VALUES(340000000000000000000000000000000000001);COMMIT;
SELECT * FROM S1.T6;

在这里插入图片描述

1.10 FLOAT 类型(修改精度没有用)

语法:
FLOAT[(精度)]
说明:
FLOAT 是带二进制精度的浮点数,精度最大不超过 53,如省略精度,则二进制精度为 53,十进制精度为 15。取值范围为-1.7E+308~1.7E+308。
注意:当精度小于24时,DM将其转为REAL类型;精度大于24时,精度转为DOUBLE类型
举例: 参考REAL

CREATE TABLE S1.T7 (num FLOAT(3));
INSERT INTO S1.T7 VALUES(1);COMMIT;
INSERT INTO S1.T7 VALUES(0.555555555555555555);COMMIT;
INSERT INTO S1.T7 VALUES(6666.555555555555555555);COMMIT;
INSERT INTO S1.T7 VALUES(6666666666666.555555555555555555);COMMIT;
SELECT * FROM S1.T7;

在这里插入图片描述

1.11 DOUBLE 类型

语法:
DOUBLE[(精度)]
说明:
同 FLOAT 相似,精度最大不超过 53。
举例:

1.12 DOUBLE PRECISION 类型

语法:
DOUBLE PRECISION
说明:
该类型指明双精度浮点数,其二进制精度为 53,十进制精度为 15。取值范围-1.7E+308 ~1.7E+308。
举例:

2 字符数据类型

2.1 CHAR/CHARACTER 类型

语法:
CHAR[(长度)]
CHARACTER[(长度)]
说明:
定长字符串,最大长度由数据库页面大小决定,具体可参考《DM8_SQL 语言使用手册》1.4.1 节。长度不足时,自动填充空格。
举例:

CREATE TABLE S1.T12 (num CHAR(10));
INSERT INTO S1.T12 VALUES('');COMMIT;
INSERT INTO S1.T12 VALUES('aaa');COMMIT;
INSERT INTO S1.T12 VALUES('aaaaabbbbb');COMMIT;
SELECT * FROM S1.T12;

在这里插入图片描述

2.2 VARCHAR 类型

语法:
VARCHAR[(长度)]
说明:
可变长字符串,最大长度由数据库页面大小决定,具体可参考《DM8_SQL 语言使用手册》1.4.1 节。该数据类型存储的数据量受到LENGTH_IN_CHAR和CHARSET参数的影响。
根据数据库初始化时的参数不同,VARCHAR中能存储的汉字个数不同。主要由如下 2 个参数决定:

  • UNICODE_FALG:表示数据库中数据的字符集。可用 select unicode 来查询当前数据库的字符集种类,0 代表 gb18030;1 代表 UTF-8。
  • LENGTH_IN_CHAR:决定数据库中 VARCHAR 类型对象的长度是否以字符为单位。取值为 1 表示以字符为单位,将存储长度值按照理论字符长度进行放大。取值为 0 则所有 VARCHAR 以字节为单位。
    举例:参考

3 多媒体数据类型

3.1 TEXT/LONGVARCHAR 类型

语法:
TEXT
LONGVARCHAR
说明:
变长字符串类型,其字符串的长度最大为 100G-1,可用于存储长的文本串。
举例:
TEXT类型查询出来默认为<长文本>,无法直接查看数据,可通过convert(varchar, 列名 )来转换,但注意varchar类型有长度限制。

CREATE TABLE S1.T14 (t TEXT);
INSERT INTO S1.T14 VALUES('');COMMIT;
INSERT INTO S1.T14 VALUES('爱我中华');COMMIT;
INSERT INTO S1.T14 VALUES('爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦爱我中华啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦');COMMIT;
SELECT * FROM S1.T14;

在这里插入图片描述

select convert(varchar, t ) AS text_col FROM S1.T14;

在这里插入图片描述

3.2 IMAGE/LONGVARBINARY 类型

语法:
IMAGE
LONGVARBINARY
说明:
可用于存储多媒体信息中的图像类型。图像由不定长的象素点阵组成,长度最大为 100G-1 字节。该类型除了存储图像数据之外,还可用于存储任何其它二进制数据。
举例:

3.3 BLOB 类型

语法:
BLOB
说明:
BLOB 类型用于指明变长的二进制大对象,长度最大为 100G-1 字节。
举例:

3.4 CLOB 类型

语法:
CLOB
说明:
CLOB 类型用于指明变长的字符串,长度最大为 100G-1 字节。
举例:

3.5 BFILE 类型

语法:
BFILE
说明:
BFILE 用于指明存储在操作系统中的二进制文件,文件存储在操作系统而非数据库中,仅能进行只读访问。
举例:

4 日期时间数据类型

DMSQL 程序支持的日期时间数据类型分为一般日期时间数据类型、时区数据类型和时间间隔数据类型三类。

4.1 一般日期时间数据类型

4.1.1 DATE 类型

语法:
DATE
说明:
DATE 类型包括年、月、日信息,定义了’-4712-01-01’和’9999-12-31’之间任何一个有效的格里高利日期。
举例:

CREATE TABLE S2.T1 (t DATE);
INSERT INTO S2.T1 VALUES('2024-01-15');COMMIT;
INSERT INTO S2.T1 VALUES('2024-1-1');COMMIT;
INSERT INTO S2.T1 VALUES('1-1-1');COMMIT;
INSERT INTO S2.T1 VALUES('9999-12-31');COMMIT;
SELECT * FROM S2.T1;

在这里插入图片描述

4.1.2 TIME 类型

语法:
TIME[(小数秒精度)]
说明:
TIME 类型包括时、分、秒信息,定义了一个在’00:00:00.000000’和’23:59:59.999999’之间的有效时间。TIME 类型的小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如果未定义,缺省精度为 0。
举例:

CREATE TABLE S2.T2 (t time(1));
INSERT INTO S2.T2 VALUES('12:00:22.111');COMMIT;
INSERT INTO S2.T2 VALUES('12:00:11');COMMIT;
SELECT * FROM S2.T2;

在这里插入图片描述

4.1.3 TIMESTAMP/DATETIME 类型

语法:
TIMESTAMP[(小数秒精度)]
DATETIME[(小数秒精度)]
说明:
TIMESTAMP/DATETIME 类型包括年、月、日、时、分、秒信息,定义了一个在’-4712-01-0100:00:00.000000’和’9999-12-31 23:59:59.999999’之间的有效格里高利日期时间。小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如果未定义,缺省精度为 6。
举例:

CREATE TABLE S2.T3 (t datetime(1));
INSERT INTO S2.T3 VALUES('12:00:22.111');COMMIT;
INSERT INTO S2.T3 VALUES('12:00:11');COMMIT;
INSERT INTO S2.T3 VALUES('2024-1-15');COMMIT;
INSERT INTO S2.T3 VALUES('2024-1-15 16:17');COMMIT;
INSERT INTO S2.T3 VALUES('2024-1-15 16');COMMIT;
INSERT INTO S2.T3 VALUES('2024-1 16');COMMIT;
INSERT INTO S2.T3 VALUES('2024 1 23 13 11');COMMIT;
SELECT * FROM S2.T3;

在这里插入图片描述

4.2 时区数据类型

4.2.1 TIME WITH TIME ZONE 类型

语法:
TIME[(小数秒精度)]WITH TIME ZONE
说明:
描述一个带时区的 TIME 值,其定义是在 TIME 类型的后面加上时区信息。时区部分的实质是 INTERVAL HOUR TO MINUTE 类型,取值范围:-12:59 与 +14:00 之间。例如:TIME ‘09:10:21 +8:00’。
举例:

CREATE TABLE S2.T4 (t TIME(1) WITH TIME ZONE);
INSERT INTO S2.T4 VALUES('12:00:22.111');COMMIT;
SELECT * FROM S2.T4;

在这里插入图片描述

4.2.2 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’。
举例:

CREATE TABLE S2.T5 (t TIMEstamp(1) WITH TIME ZONE);
INSERT INTO S2.T5 VALUES('12:00:22.111');COMMIT;
SELECT * FROM S2.T5;

在这里插入图片描述

4.2.3 TIMESTAMP WITH LOCAL TIME ZONE 类型

语法:
TIMESTAMP[(小数秒精度)]WITH LOCAL TIME ZONE
说明:
描述一个本地时区的 TIMESTAMP 值,能够将标准时区类型 TIMESTAMP WITH TIME ZONE 类型转化为本地时区类型,如果插入的值没有指定时区,则默认为本地时区。
举例:

CREATE TABLE S2.T6 (t TIMEstamp(1) WITH local TIME ZONE);
INSERT INTO S2.T6 VALUES('1900-01-01 12:00:22.1');COMMIT;
INSERT INTO S2.T6 VALUES('1900-01-01 12:00:22.1 +08:00');COMMIT;
INSERT INTO S2.T6 VALUES('1900-01-01 12:00:22.1 +12:00');COMMIT;
SELECT * FROM S2.T6;

在这里插入图片描述

4.3 时间间隔数据类型

DM 支持两类十三种时间间隔类型:两类是年-月间隔类和日-时间隔类,它们通过时间间隔限定符区分,前者结合了日期字段年和月,后者结合了时间字段日、时、分、秒。由时间间隔数据类型所描述的值总是有符号的。需要查看更为详细的信息可参看《DM8_SQL 语言使用手册》1.4.3 节。

三、总结

1 数值类型

  • NUMERIC[精度,标度]:用于存储零、正负定点数。精度范围1至38
  • NUMBER类型:跟NUMERIC相同
  • DECIMAL/DEC类型:跟NUMERIC相似
  • BIT类型:用于存储整数数据1、0或null
  • INTEGER/INT类型:用于存储有符号整数,精度为10
  • PLS_INTEGER类型:与INTEGER相同
  • BIGINT类型:用于存储有符号整数,精度为19,标度为0
  • TINYINT类型:用于存储有符号整数,精度为3,标度为0。取值范围为:-128~+127。
  • BYTE类型:与TINYINT相似,精度为3,标度为0。
  • SMALLINT类型:用于存储有符号整数,精度为5,标度为0。
  • BINARY类型:指定定长二进制数据。
  • VARBINARY类型:指定变长二进制数据。用法类似BINARY数据类型。
  • REAL类型:带二进制的浮点数。
  • FLOAT类型:二进制精度的浮点数,精度最大不超过53。
  • DOUBLE类型:同FLOAT相似,精度最大不超过53。
  • DOUBLE PRECISION类型:该类型指明双精度浮点数,其二进制精度为53,十进制精度为15。

2 字符类型

  • CHAR/CHARACTER类型:定长字符串,最大长度由数据库页面大小决定。
  • VARCHAR类型:可变长字符串,最大长度由数据库页面大小决定。

3 多媒体类型

  • TEXT/LONGVARCHAR类型:变长字符串类型,其字符串的长度最大为2G-1,可用于存储长的文本串。
  • IMAGE/LONGVARBINARY类型:可用于存储多媒体信息中的图像类型。
  • BLOB类型:用于指明变长的字符串,长度最大为2G-1字节。
  • CLOB类型:用于指明变长的字符串,长度最大为2G-1字节。
  • BFILE类型:用于指明存储在操作系统中的二进制文件。

4 日期类型

  • DATE类型:包括年、月、日信息,定义了‘-4712-01-01’和‘9999-12-31’之间任何一个有效的格里高利日期。
  • TIME类型:包括时、分、秒信息。
  • TIMESTAMP/DATATIME:包括年、月、日、时、分、秒信息。
  • TIME WITH TIME ZONE类型:描述一个带时区的TIME值。
  • TIMESTAMP WITH TIME ZONE类型
  • TIMESTAMP WITH LOCAL TIME ZONE类型:描述一个本地时区的TIMESTAMP值。

社区地址: https://eco.dameng.com/

  • 44
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值