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”。 |
年份 | 四位数格式的年份。四位数格式允许的值:1901到2155,以及0000。 MySQL 8.0不支持两位数格式的年份。 |
SQL Server 数据类型
字符串数据类型
数据类型 | 描述 | 最大大小 | 存储 |
---|---|---|---|
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 | |
image | 可变宽度二进制字符串 | 2GB |
数值数据类型
数据类型 | 描述 | 存储 |
---|---|---|
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个字节 |
日期时间数据类型
数据类型 | 描述 | 存储 |
---|---|---|
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 | 存储每次创建或修改行时更新的唯一数字。时间戳值基于内部时钟,不对应实际时间。每个表只能有一个时间戳变量 |
其他数据类型
数据类型 | 描述 |
---|---|
sql_variant | 存储各种数据类型的最多 8,000 个字节的数据,除了 text、ntext 和 timestamp |
uniqueidentifier | 存储全局唯一标识符 (GUID) |
xml | 存储 XML 格式的数据。最大 2GB |
cursor | 存储用于数据库操作的游标的引用 |
table | 存储结果集以供以后处理 |
MS Access 数据类型
数据类型 | 描述 | 存储 |
---|---|---|
Text | 用于文本或文本和数字的组合。最多 255 个字符 | |
Memo | Memo 用于存储大量文本。存储最多 65,536 个字符。注意:您不能对备忘录字段进行排序。但是,它们是可以搜索的 | |
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 | 逻辑字段可以显示为是/否、真/假或开/关。在代码中,使用常量 True 和 False(相当于 -1 和 0)。注意:Yes/No 字段不允许为空值 | 1位 |
Ole Object | 可以存储图片、音频、视频或其他 BLOB(二进制大对象) | 最多 1GB |
Hyperlink | 包含指向其他文件的链接,包括网页 | |
Lookup Wizard | 允许您键入选项列表,然后可以从下拉列表中选择这些选项 | 4个字节 |