数据库基础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

NUMBER

7456123.89

7,456,123.89

NUMBER(*,1)

7456123.9

7,456,123.89

NUMBER(9)

7456124

7,456,123.89

NUMBER(9,2)

7456123.89

7,456,123.89

NUMBER(9,1)

7456123.9

7,456,123.89

NUMBER(6)

(不接受,超过精度)

7,456,123.89

NUMBER(7,-2)

7456100

3、日期和时间类型

日期时间类型包括DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE

时间间隔类型包括INTERVAL YEAR TO MONTHINTERVAL 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位的小数秒