47、SQL 各种数据库的数据类型

Microsoft Access、MySQL 和 SQL Server 所使用的数据类型和范围

Microsoft Access 数据类型

数据类型 描述 存储
Text 用于文本或文本与数字的组合。最多 255 个字符
Memo Memo 用于更大数量的文本。最多存储 65,536 个字符
不可以对 memo 字段进行排序
Memo 可以搜索的
Byte 允许 0 到 255 的之间数字 1 字节
Integer 允许介于 -32,768 与 32,767 之间的全部数字 2 字节
Long 允许介于 -2,147,483,648 与 2,147,483,647 之间的全部数字 4 字节
Single 单精度浮点数 4 字节
Double 双精度浮点数 8 字节
Currency 用于货币
支持 15 位的元,外加 4 位小数
可以选择使用哪个国家的货币
8 字节
AutoNumber 自动为每条记录分配数字,默认从 1 开始 4 字节
Date/Time 用于存储日期和时间 8 字节
Yes/No 逻辑字段,可以显示为 Yes/No、True/False 或 On/Off
在代码中,使用常量 True 和 False (等价于 1 和 0)
Yes/No 字段中不允许 Null 值
1 比特
Ole Object 存储图片、音频、视频等 BLOBs < 1GB
Hyperlink 可以存储包含指向其他文件的链接,包括网页
Lookup Wizard 可以创建一个可从下拉列表中进行选择的选项列表 4 字节

MySQL/MariaDB 数据类型

在MySQL/MariaDB 中,有三种主要的类型:

  • Text (文本)
  • Number (数字)
  • Date/Time (日期/时间) 类型

Text 类型

数据类型 描述
CHAR(size) 保存固定长度的字符串(可包含字母、数字以及特殊字符)
在括号中指定字符串的长度
最多 255 个字符
VARCHAR(size) 保存可变长度的字符串(可包含字母、数字以及特殊字符)
在括号中指定字符串的最大长度
最多 255 个字符
注意:如果值的长度大于 255,会被转换为 TEXT 类型
TINYTEXT 存放最大长度为 255 个字符的字符串
TEXT 存放最大长度为 65,535 个字符的字符串
BLOB 用于 BLOBs(Binary Large OBjects)
存放最多 65,535 字节的数据。
MEDIUMTEXT 存放最大长度为 16,777,215 个字符的字符串
MEDIUMBLOB 用于 BLOBs(Binary Large OBjects)
存放最多 16,777,215 字节的数据
LONGTEXT 存放最大长度为 4,294,967,295 个字符的字符串
LONGBLOB 用于 BLOBs (Binary Large OBjects)
存放最多 4,294,967,295 字节的数据。
ENUM(x,y,z,...) 允许输入可能值的列表
可以在 ENUM 列表中列出最大 65535 个值
如果列表中不存在插入的值,则插入空值
注意:存储的值是按照输入的顺序排序的
可以按照此格式输入可能的值 ENUM('X','Y','Z')
SET 与 ENUM 类似,但 SET 最多只能包含 64 个列表项且 SET 可存储一个以上的选择

Number 类型

数据类型 描述
TINYINT(size) 带符号 -128 到 127 ,无符号 0 到 255
SMALLINT(size) 带符号范围 -32768 到 32767
无符号 0 到 65535
size 默认为 6
MEDIUMINT(size) 带符号范围 -8388608 到 8388607
无符号的范围是 0 到 16777215
size 默认为 9
INT(size) 带符号范围 -2147483648 到 2147483647
无符号的范围是 0 到 4294967295
size 默认为 11
BIGINT(size) 带符号的范围是 -9223372036854775808 到 9223372036854775807
无符号的范围是0到 18446744073709551615
size 默认为 20
FLOAT(size,d) 带有浮动小数点的小数字
在 size 参数中规定显示最大位数
在 d 参数中规定小数最大位数
DOUBLE(size,d) 带有浮动小数点的大数字
在 size 参数中规显示定最大位数
在 d 参数中规定小数的最大位数
DECIMAL(size,d) 作为字符串存储的 DOUBLE 类型,允许固定的小数点
在 size 参数中规定显示最大位数
在 d 参数中规定小数点右侧的最大位数

上表中的 size 并不是指存储在数据库中的具体的长度,而是显示的位数。如 int(4) 并不是只能存储4个长度的数字

int(size) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。 就是在显示给用户的方式有点不同外,int(M) 跟 int 数据类型是相同的

例如:int 的 值为 10 (指定zerofill)

int(9)显示结果为000000010
int(3)显示结果为010

就是显示的长度不一样而已 都是占用四个字节的空间

Date 类型

数据类型 描述
DATE() 日期。格式:YYYY-MM-DD
支持的范围是从 '1000-01-01' 到 '9999-12-31'
DATETIME() *日期和时间的组合
格式:YYYY-MM-DD HH:MM:SS
支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
TIMESTAMP() *时间戳
TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的秒数来存储
格式:YYYY-MM-DD HH:MM:SS
支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
TIME() 时间
格式:HH:MM:SS
支持的范围是从 '-838:59:59' 到 '838:59:59'
YEAR() 2 位或 4 位格式的年
4 位格式所允许的值:1901 到 2155
2 位格式所允许的值:70 到 69 表示从 1970 到 2069

* 虽然 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式是不同的

  • 在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。
  • TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD

SQL Server 数据类型

String 类型

数据类型 描述 长度
char(n) 固定长度的字符串
最多 8,000 个字符
参数 n 的大小
varchar(n) 可变长度的字符串
最多 8,000 个字符
2 bytes + 字符数量
varchar(max) 可变长度的字符串
最多 1,073,741,824 个字符
2 bytes + 字符数量
text 可变长度的字符串
最多 2GB 文本数据
4 bytes + 字符数量
nchar 固定长度的 Unicode 字符串
最多 4,000 个字符
参数 n*2 的大小
nvarchar 可变长度的 Unicode 字符串
最多 4,000 个字符
nvarchar(max) 可变长度的 Unicode 字符串
最多 536,870,912 个字符
ntext 可变长度的 Unicode 字符串
最多 2GB 文本数据
bit 允许 0、1 或 NULL
binary(n) 固定长度的二进制字符串
最多 8,000 字节
varbinary 可变长度的二进制字符串
最多 8,000 字节
varbinary(max) 可变长度的二进制字符串
最多 2GB
image 可变长度的二进制字符串
最多 2GB

Number 类型

数据类型 描述 长度
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 字节

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 字节
time 仅存储时间。精度为 100 纳秒 3-5 字节
datetimeoffset 与 datetime2 相同,外加时区偏移 8-10 字节
timestamp 存储唯一的数字,每次创建或修改某行时,字段会更新
timestamp 值基于内部时钟,不对应真实时间
每个表只能有一个 timestamp 变量。

其他数据类型

数据类型 描述
sql_variant 存储最多 8,000 字节不同数据类型的数据
除了 text、ntext 以及 timestamp
uniqueidentifier 存储全局唯一标识符 (GUID)
xml 存储 XML 格式化数据
最多 2GB
cursor 存储对用于数据库操作的指针的引用
table 存储结果集,供稍后处理