数据库基础02——对应各DBMS的数据类型小结
文章目录
- 数据库基础02——对应各DBMS的数据类型小结
- 一、MySQL常用数据类型
- 1、串数据类型(string)
- 2、数值数据类型(number)
- 3、日期和时间数据类型 (date)
- 4、二进制数据类型(存字节)
- 二、SQL Server的数据类型
- 1、串类型(string)
- 2、数值类型(number )
- 3、Date 类型:
- 4、其他数据类型:
- 三、ORACLE 数据类型
- 1、串类型
- 2、数值类型
- 3、日期和时间类型
一、MySQL常用数据类型
在这里声明一下 mysql 5.5.的文档,如果公司确定用mysql,直接看文档最详细
https://dev.mysql.com/doc/refman/5.5/en/
mysql主要的数据类型:
1、串数据类型
2、数值数据类型
3、日期和时间数据类型
4、二进制数据类型
1、串数据类型(string)
mysql遵循了ANSI SQL标准,同样分为定长串 和变长串两种数据类型,存储字符串以及字节。
为什么要使用定长数据类型?答案:性能
MySQL处理定长列远比处理变长列快得多。此外, MySQL不允许对变长列(或一个列的可变部分)进行索引。这也会极大地影响性能 。但是不要乱用定长数据类型,只有长度确定的类型才用,不然浪费空间。 剩余的位数会用空格填充。
数据类型 | 说明 |
CHAR(size) | 1~255个字符的定长串。它的长度必须在创建时指定,否则MySQL 假定为CHAR(1) (可包含字母、数字以及特殊字符) |
ENUM(x,y,z,etc.) | 接受最多64 K 个串组成的一个预定义集合的某个串。即:允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。注释:这些值是按照你输入的顺序存储的.可以按照此格式输入可能的值:ENUM(‘X’,‘Y’,‘Z’) 后台默认映射为1,2,3… 例如ENUM(‘X’,‘Y’,‘Z’),insert时可以是序号1,也可以是枚举’X’ |
SET | 接受最多64个串组成的一个预定义集合的零个或多个串 |
TEXT | 长度可变,最大长度为65535(约64kb)的变长字符串 |
TINYTEXT | 与TEXT相同,但最大长度为255字节 |
LONGTEXT | 同TEXT,存放最大长度为 4,294,967,295(约4GB) 个字符的字符串。 |
MEDIUMTEXT | 同TEXT, 存放最大长度为 16,777,215 (约16mb)个字符的字符串。 |
VARCHAR(n) | 长度可变,4.1之前0~255字节。5.0以后,最大存64k字节左右(可包含字母、数字以及特殊字符) |
一般用varchar(n), 慎用enum和set。mysql默认utf8,一个英文一个字节,一个中文3个字节
2、数值数据类型(number)
**有符号或无符号 ** :所有数值数据类型(除BIT和BOOLEAN外)都可以有符号或无符号。有符号数值列可以存储正或负的数值,无符号数值列只能存储正数。默认情况为有符号,但如果你知道自己不需要存储负值,可以使用UNSIGNED关键字,这样做将允许你存储两倍大小的值。
数据类型 | 说明 |
BIT | 位字段, 1~64位。默认bit(1),(在MySQL 5之前, BIT在功能上等价于 TINYINT |
BIGINT | 整数值,支持 -9223372036854775808~9223372036854775807 (如果是UNSIGNED,为0~18446744073709551615)的数 |
BOOLEAN(或BOOL) | 布尔标志,或者为0或者为1,主要用于开/关(on/off)标志 mysql会默认以tinyint(1) 类型存储 |
DECIMAL(m,d)(或DEC) | 精度可变的浮点值,默认 decimal(10,0),如果指定decimal(5,2),则插入100.255会四舍五入 100.26 。 m表示总位数,d表示精确到小数点后面几位。 1<m<254; 0<n<60 |
DOUBLE(M,D) | 双精度浮点值,m总位数,d小数位,比float精度高 |
FLOAT(M,D) | 单精度浮点值,m总位数,d小数位 |
INT(或INTEGER) | 整数值,支持 -2147483648~2147483647(如果是UNSIGNED, 为0~4294967295)的数 |
MEDIUMINT | 整数值,支持 -8388608~8388607(如果是UNSIGNED,为0~ 16777215)的数 |
REAL | 4字节的浮点值 |
SMALLINT | 整数值,支持 -32768~32767(如果是UNSIGNED,为0~ 65535)的数 |
TINYINT | 整数值,支持 -128~127(如果为UNSIGNED,为0~255)的数 |
注意:MySql 没有专美存储货币的数据类型,一般情况下使用DECIMAL(8,2) 来表示
关于 FLOAT(size,d) 和DOUBLE(size,d):
MySQL对于单精度值使用四个字节,对于双精度值使用八个字节。
因为FLOAT
,SQL标准允许FLOAT
在括号中的关键字后面的位中选择性地指定精度(但不是指数的范围) 。MySQL还支持此可选的精度规范,但精度值仅用于确定存储大小。精度从0到23会产生一个4字节的单精度FLOAT
列。精度从24到53会产生一个8字节的双精度DOUBLE
列。
3、日期和时间数据类型 (date)
数据类型 | 说明 |
DATE | 表示1000-01-01~9999-12-31的日期,格式为 YYYY-MM-DD |
DATETIME | DATE和TIME的组合,即年月日时分秒 |
TIMESTAMP | 功能和DATETIME相同(但范围较小) |
TIME | 格式为HH:MM:SS |
YEAR | 用2位数字表示,范围是70(1970年)~69(2069 年),用4位数字表示,范围是1901年~2155年 |
4、二进制数据类型(存字节)
数据类型 | 说明 |
BLOB | Blob最大长度为64 KB |
MEDIUMBLOB | Blob最大长度为16 MB |
LONGBLOB | Blob最大长度为4 GB |
TINYBLOB | Blob最大长度为255字节 |
二、SQL Server的数据类型
1、串类型(string)
数据类型 | 描述 | Defined width |
char(n) | 固定长度的字符串。最多 8,000 个字符。即:输入长度小于n,自动补全空格 | Defined width |
varchar(n) | 可变长度的字符串。n取值1-8000。 | 2 bytes + number of chars |
varchar(max) | 可变长度的字符串。最多 2^31 -1 个字符。 | 2 bytes + number of chars |
text | 可变长度的字符串,文本数据。最多 2GB 文本数据。 | 4 bytes + number of chars |
nchar(n) | 固定长度的 Unicode 字符串。n取值1~4000,默认为1。 | 每个存储单位2字节 |
nvarchar(n) | 可变长度的 Unicode 字符串。n取值1~4000。 | |
nvarchar(max) | 可变长度的 Unicode 字符串。最多 536,870,912 个字符。 | 存储大小是所输入字符类型的大小的2倍再加2个字节 |
ntext | 可变长度的 Unicode 字符串。最多 2GB 文本数据。 | |
binary(n) | 固定长度的二进制字符串。n的取值范围为1~8000,存储大小为n字节,在输入二进制数据时,要加0x前缀,一旦输入的数据长度大于n,则会被截取 | |
varbinary(n) | 可变长度的二进制字符串。n的取值范围为1~8000 | |
varbinary(max) | 可变长度的二进制字符串。最多 2GB。 | |
image | 可变长度的二进制字符串。最多 2GB。用于存储图像等数据,且该字段不能用insert直接插入 | |
2、数值类型(number )
数据类型 | 描述 | 存储 |
bit | 允许 0、1 或 NULL,常被用作布尔型,0,1表示true,false | |
tinyint | 允许从 0 到 255 的所有数字。 | 1 字节 |
smallint | 允许介于 -32,768 与 32,767 的所有数字。 | 2 字节 |
int | 允许介于 -2,147,483,648 与 2,147,483,647 的所有数字。 | 4 字节 |
bigint | 允许介于 -9,223,372,036,854,775,808 与 9,223,372,036,854,775,807 之间的所有数字。 | 8 字节 |
decimal(p,s) | 固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。 p 参数指示可以存储的最大位数(小数点左侧和右侧)。 p 必须是 1 到 38 之间的值。默认是 18。 s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。 | 5-17 字节 |
numeric(p,s) | 固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。 p 参数指示可以存储的最大位数(小数点左侧和右侧)。 p 必须是 1 到 38 之间的值。默认是 18。 s 参数指示小数点右侧存储的最大位数。 s 必须是 0 到 p 之间的值。默认是 0。 | 5-17 字节 |
smallmoney | 介于 -214,748.3648 与 214,748.3647 之间的货币数据。 | 4 字节 |
money | 介于 -922,337,203,685,477.5808 与 922,337,203,685,477.5807 之间的货币数据。 | 8 字节 |
float(n) | 从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据。 n 参数指示该字段保存 4 字节还是 8 字节。 float(24) 保存 4 字节,而 float(53) 保存 8 字节。n 的默认值是 53。 | 4 或 8 字节 |
real | 从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据。 | 4 字节 |
3、Date 类型:
数据类型 | 描述 | 存储 |
datetime | 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。 | 8 字节 |
datetime2 | 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。 | 6-8 字节 |
smalldatetime | 从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。 | 4 字节 |
date | 仅存储日期。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 | 3 bytes |
time | 仅存储时间。精度为 100 纳秒。 | 3-5 字节 |
datetimeoffset | 与 datetime2 相同,外加时区偏移。 | 8-10 字节 |
timestamp | 存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp 值基于内部时钟,不对应真实时间。每个表只能有一个 timestamp 变量。 |
4、其他数据类型:
数据类型 | 描述 |
sql_variant | 存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp。 |
uniqueidentifier | 存储全局唯一标识符 (GUID)。 |
xml | 存储 XML 格式化数据。最多 2GB。 |
cursor | 存储对用于数据库操作的指针的引用。 |
table | 存储结果集,供稍后处理。 |
三、ORACLE 数据类型
1、串类型
数据类型 | 描述 |
char(n) | 定长字符串,n取值范围1~2000,默认1字节 |
varchar2(n) | 变长字符串,n取值1~4000。自Oracle12C起,它可以最多存储32767字节信息; |
nchar | 固定长度unicode字符串。最多存储2000字节 |
nvarchar2 | 可变长度的Unicode格式字符串。最多存储4000字节信息,Oracle12C起,最多32767 |
long | 存储最多2^32-1字节的变长字符串。 这个类型存在的意义仅仅是为了向后兼容,因此不要在自己的数据库中使用这个类型。如果有存储大字符串的需求,使用CLOB和NCLOB类型。 |
大对象类型 | 大对象类型(Large Objects)包括BLOB、 CLOB、 NCLOB和BFILE。它们允许你存储和可操作大型非结构化的数据,例如图片、文本、视频、声音等等。 |
blob | BLOB数据类型在数据库中存储非结构化的二进制数据。blob最多可以存储128tb的二进制数据。 |
clob 和nclob | CLOB和NCLOB数据类型在数据库中存储最多128tb的字符数据。 clob存储数据库字符集数据,nclob存储Unicode国家字符集数据。 在一个固定宽度的Unicode字符集中存储可变宽度的LOB数据使Oracle数据库能够在clob和nclob上提供高效的基于字符的随机访问。 |
bfile | BFILE类型存储在数据库之外的非结构化的二进制数据。BFILE数据存储了指向外部文件的文件定位符。可以存储的BFILE数量手操作系统的限制。另外,BFILE是只读的。 |
2、数值类型
数据类型 | 描述 |
number | 存储精度最多达38位的数字,以变长方式来存储,长度在0~22字节(null值长度为0)。它的精度很高; |
BINARY_FLOAT | BINARY_FLOAT是32位单精度浮点数类型,需要占用5个字节的存储空间,包括一个长度字节 |
BINARY_DOUBLE | BINARY_DOUBLE是64位双精度浮点数类型,需要占用9个字节的存储空间,包括一个长度字节。 |
number 类型例子
输入数据 | 指定为 | 存储为 |
7,456,123.89 |
| 7456123.89 |
7,456,123.89 |
| 7456123.9 |
7,456,123.89 |
| 7456124 |
7,456,123.89 |
| 7456123.89 |
7,456,123.89 |
| 7456123.9 |
7,456,123.89 |
| (不接受,超过精度) |
7,456,123.89 |
| 7456100 |
3、日期和时间类型
日期时间类型包括DATE
,TIMESTAMP
,TIMESTAMP WITH TIME ZONE
,TIMESTAMP WITH LOCAL TIME ZONE
。
时间间隔类型包括INTERVAL YEAR TO MONTH
和INTERVAL DAY TO SECOND
两种。
数据类型 | 描述 |
date | 7字节的定宽日期/时间数据类型,世纪、世纪中的哪一年、月份、天、小时、分钟和秒; |
timestamp | 7字节或11字节的定宽日期时间数据类型(高精度会使用11字节)。它与date数据类型不同,因为timestamp可以包含小数秒,带小数秒的timestamp最多可以保留9位小数 |
timestamp with time zone | 这是一个13字节的定宽timestamp,不过它还提供了时区(time zone)支持。因为时区信息是与timestamp存储在一起的,所以数据在插入时的时区信息会与时间一起保留下来; |
timestamp with local time zone | 与timestamp类型,这是一种以7字节或11字节的定宽日期时间数据类型(高精度会使用11字节);不过,这种类型对时区敏感; |
interval year to month | 这是个5字节的定宽数据类型,用于存储一个时段。这个类型将时段存储为年数和月数;我们可以在日期运算中使用这种时段,使一个date或timestamp类型的数据增加或减少一段时间; |
interval day to second | 这是个11字节的定宽数据类型,用于存储一个时段。这种类型将时段存储为天、小时、分钟、秒数,还可以有最多9位的小数秒 |