SQL MySQL, SQL Server 和 MS Access 的数据类型
列的数据类型定义了该列可以包含的值:整数、字符、货币、日期和时间、二进制等。
SQL 数据类型
数据库表中的每一列都必须有一个名称和一个数据类型。
SQL 开发人员在创建表时必须决定每列要存储什么类型的数据。数据类型是 SQL 理解每列中预期数据类型的指南,它还确定了 SQL 如何与存储的数据进行交互。
注意:不同数据库中的数据类型名称可能不同。即使名称相同,大小和其他细节也可能不同!务必查阅文档!
MySQL 数据类型 (版本 8.0)
在 MySQL 中,主要有三种数据类型:字符串、数值以及日期和时间。
字符串数据类型
数据类型 | 描述 |
---|---|
CHAR(size) | 固定长度字符串(可包含字母、数字和特殊字符)。size 参数指定了字符列的长度,范围从 0 到 255。默认值为 1。 |
VARCHAR(size) | 可变长度字符串(可包含字母、数字和特殊字符)。size 参数指定了最大字符串长度(字符数),范围从 0 到 65535。 |
BINARY(size) | 与 CHAR() 相同,但存储二进制字节字符串。size 参数指定了字节列的长度。默认值为 1。 |
VARBINARY(size) | 与 VARCHAR() 相同,但存储二进制字节字符串。size 参数指定了最大字节列的长度。 |
TINYBLOB | 用于 BLOB(二进制大对象)。最大长度:255 字节。 |
TINYTEXT | 存储最大长度为 255 个字符的字符串。 |
TEXT(size) | 存储最大长度为 65,535 字节的字符串。 |
BLOB(size) | 用于 BLOB(二进制大对象)。存储最多 65,535 字节的数据。 |
MEDIUMTEXT | 存储最大长度为 16,777,215 个字符的字符串。 |
MEDIUMBLOB | 用于 BLOB(二进制大对象)。存储最多 16,777,215 字节的数据。 |
LONGTEXT | 存储最大长度为 4,294,967,295 个字符的字符串。 |
LONGBLOB | 用于 BLOB(二进制大对象)。存储最多 4,294,967,295 字节的数据。 |
ENUM(val1, val2, val3, ...) | 一个字符串对象,只能包含一个值,该值从可能的列表中选择。您可以在 ENUM 列表中最多列出 65535 个值。如果插入的值不在列表中,则会插入一个空值。值将按您输入的顺序排序。 |
SET(val1, val2, val3, ...) | 一个字符串对象,可以包含 0 个或多个值,这些值从可能的列表中选择。您可以在 SET 列表中最多列出 64 个值。 |
数值数据类型
数据类型 | 描述 |
---|---|
BIT(size) | 位值类型。每个值的位数在size中指定。size参数可以包含 1 到 64 的值。size的默认值是 1。 |
TINYINT(size) | 非常小的整数。有符号范围是 -128 到 127。无符号范围是 0 到 255。size参数指定了最大显示宽度(即 255)。 |
BOOL | 零被视为假,非零值被视为真。 |
BOOLEAN | 等于 BOOL。 |
SMALLINT(size) | 小的整数。有符号范围是 -32768 到 32767。无符号范围是 0 到 65535。size参数指定了最大显示宽度(即 255)。 |
MEDIUMINT(size) | 中等整数。有符号范围是 -8388608 到 8388607。无符号范围是 0 到 16777215。size参数指定了最大显示宽度(即 255)。 |
INT(size) | 中等整数。有符号范围是 -2147483648 到 2147483647。无符号范围是 0 到 4294967295。size参数指定了最大显示宽度(即 255)。 |
INTEGER(size) | 等于 INT(size)。 |
BIGINT(size) | 大的整数。有符号范围是 -9223372036854775808 到 9223372036854775807。无符号范围是 0 到 18446744073709551615。size参数指定了最大显示宽度(即 255)。 |
FLOAT(size, d) | 浮点数。总位数在size中指定。小数点后的位数在d参数中指定。此语法在 MySQL 8.0.17 中已弃用,将在未来的 MySQL 版本中移除。 |
FLOAT(p) | 浮点数。MySQL 使用p值来确定是将 FLOAT 还是 DOUBLE 用于结果数据类型。如果p的范围是 0 到 24,则数据类型为 FLOAT()。如果p的范围是 25 到 53,则数据类型为 DOUBLE()。 |
DOUBLE(size, d) | 正常大小的浮点数。总位数在size中指定。小数点后的位数在d参数中指定。 |
DOUBLE PRECISION(size, d) | |
DECIMAL(size, d) | 精确的定点数。总位数在size中指定。小数点后的位数在d参数中指定。size的最大值为 65。d的最大值为 30。size的默认值为 10。d的默认值为 0。 |
DEC(size, d) | 等于 DECIMAL(size,d)。 |
注意:所有数值数据类型都可以有一个额外的选项:UNSIGNED 或 ZEROFILL。如果您添加 UNSIGNED 选项,MySQL 会禁止该列出现负值。如果您添加 ZEROFILL 选项,MySQL 会自动为该列添加 UNSIGNED 属性。
日期和时间数据类型
数据类型 | 描述 |
---|---|
DATE | 日期。格式:YYYY-MM-DD。支持的范围从 '1000-01-01' 到 '9999-12-31'。 |
DATETIME(fsp) | 日期和时间组合。格式:YYYY-MM-DD hh:mm:ss。支持的范围从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。在列定义中添加 DEFAULT 和 ON UPDATE 以实现自动初始化和更新为当前日期和时间。 |
TIMESTAMP(fsp) | 时间戳。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。可以通过在列定义中使用 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 来指定自动初始化和更新为当前日期和时间。 |
TIME(fsp) | 时间。格式:hh:mm:ss。支持的范围从 '-838:59:59' 到 '838:59:59'。 |
YEAR | 以四位数字格式表示的年份。四位数字格式允许的值:1901 到 2155,以及 0000。 MySQL 8.0 不支持两位数字格式的年份。 |
SQL Server 数据类型
字符串数据类型
数据类型 | 描述 | 最大尺寸 | Storage |
---|---|---|---|
char(n) | 固定宽度字符字符串。 | 8,000 个字符 | 定义宽度 |
varchar(n) | 可变宽度字符字符串。 | 8,000 个字符 | 2 字节 + 字符数 |
varchar(max) | 可变宽度字符字符串。 | 1,073,741,824 个字符 | 2 字节 + 字符数 |
text | 可变宽度字符字符串。 | 2GB 文本数据 | 4 字节 + 字符数 |
nchar | 固定宽度 Unicode 字符串。 | 4,000 个字符 | 定义宽度 x 2 |
nvarchar | 可变宽度 Unicode 字符串。 | 4,000 个字符 | |
nvarchar(max) | 可变宽度 Unicode 字符串。 | 536,870,912 个字符 | |
ntext | 可变宽度 Unicode 字符串。 | 2GB 文本数据 | |
binary(n) | 固定宽度二进制字符串。 | 8,000 字节 | |
varbinary | 可变宽度二进制字符串。 | 8,000 字节 | |
varbinary(max) | 可变宽度二进制字符串。 | 2GB | |
图片 | 可变宽度二进制字符串。 | 2GB |
数值数据类型
数据类型 | 描述 | Storage |
---|---|---|
bit | 整数,可以是 0、1 或 NULL。 | |
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 字节 |
日期和时间数据类型
数据类型 | 描述 | Storage |
---|---|---|
datetime | 从 1753 年 1 月 1 日到 9999 年 12 月 31 日,精度为 3.33 毫秒。 | 8 字节 |
datetime2 | 从 0001 年 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 | 存储用于后续处理的结果集。 |
MS Access 数据类型
数据类型 | 描述 | Storage |
---|---|---|
文本 | 用于文本或文本与数字的组合。最多 255 个字符。 | |
Memo | Memo 用于存储大量文本。最多存储 65,536 个字符。注意:您不能对 memo 字段进行排序。但是,它们是可搜索的。 | |
Byte | 允许的整数范围是 0 到 255。 | 1 字节 |
整数 | 允许的整数范围是 -32,768 到 32,767。 | 2 字节 |
Long | 允许的整数范围是 -2,147,483,648 到 2,147,483,647。 | 4 字节 |
Single | 单精度浮点数。可以处理大多数小数。 | 4 字节 |
Double | 双精度浮点数。可以处理大多数小数。 | 8 字节 |
Currency | 用于货币。可以存储最多 15 位整数美元,外加 4 位小数。提示:您可以选择使用哪种货币。 | 8 字节 |
AutoNumber | AutoNumber 字段会自动为每条记录分配一个唯一的数字,通常从 1 开始。 | 4 字节 |
Date/Time | 用于日期和时间。 | 8 字节 |
Yes/No | 逻辑字段可以显示为 Yes/No、True/False 或 On/Off。在代码中,使用常量 True 和 False(分别等于 -1 和 0)。注意:Yes/No 字段不允许 NULL 值。 | 1 位 |
Ole Object | 可以存储图片、音频、视频或其他 BLOB(二进制大对象)。 | 最多 1GB |
Hyperlink | 包含指向其他文件(包括网页)的链接。 | |
Lookup Wizard | 允许您输入选项列表,然后可以从下拉列表中选择。 | 4 字节 |