MySQL, SQL Server 和 MS Access 的数据类型
列的数据类型定义该列可以容纳的值:整数、字符、货币、日期和时间、二进制等。
SQL 通用数据类型
数据库表中的每一列都必须有名称和数据类型。
SQL 开发人员必须在创建 SQL 表时决定表中的每个列将要存储的数据的类型。数据类型是一个标签,是便于 SQL 了解每个列期望存储什么类型的数据的指南,它也标识了 SQL 如何与存储的数据进行交互。
注释: 数据类型在不同的数据库中可能有不同的名称。即使名称相同,大小和其他细节也可能不同!请始终检查数据库文档!!
MySQL 数据类型 (Version 8.0)
在 MySQL 中,有三种主要的类型:String(文本字符串)、Number(数字)和 Date/Time(日期/时间)类型。
String 类型:
数据类型 | 描述 |
---|---|
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) | 保存最大长度为 65535 字节的字符串 |
BLOB(size) | 用于 BLOB (二进制大对象)。最多可容纳 65535 字节的数据 |
MEDIUMTEXT | 保存最大长度为 16777215个字符的字符串 |
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 个值 |
Numeric 类型:
数据类型 | 描述 |
---|---|
BIT(size) | 位值类型。每个值的位数在 size 中指定。 size 参数可以保存从 1 到 64 的值。size 的默认值为 1。 |
TINYINT(size) | 一个非常小的整数。有符号范围是-128 到 127。无符号范围是 0 到 255。size 参数指定最大显示宽度(即 255) |
BOOL | 零被认为是假,非零值被认为是真。 |
BOOLEAN | Equal to 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) | Equal to 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。< em>d 为 0。 |
DEC(size, d) | 等于 DECIMAL(size,d) |
注释: 这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。
Date 类型:
数据类型 | 描述 |
---|---|
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) | A time。格式:hh:mm:ss。支持的范围是从 '-838:59:59' 到 '838:59:59' |
YEAR | 四位数格式的年份。允许采用四位数格式的值:1901 到 2155 和 0000。 MySQL 8.0 不支持两位数格式的年份。 |
SQL Server 数据类型
String 类型:
数据类型 | 描述 | Max size | 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 | |
image | 可变宽度二进制字符串 | 2GB |
Numeric 类型:
数据类型 | 描述 | 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 字节 |
Date 类型:
数据类型 | 描述 | 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 | 存储每次创建或修改行时都会更新的唯一编号。时间戳值基于内部时钟,并不对应于实时。每个表可能只有一个时间戳变量 |
其他数据类型:
数据类型 | 描述 |
---|---|
sql_variant | 最多可存储 8,000 字节的各种数据类型的数据,除了 text、ntext 和 timestamp |
uniqueidentifier | 存储全局唯一标识符 (GUID) |
xml | 存储 XML 格式的数据。 最大 2GB |
cursor | 存储对用于数据库操作的游标的引用 |
table | 存储一个结果集以供以后处理 |
Microsoft Access 数据类型
数据类型 | 描述 | Storage |
---|---|---|
Text | 用于文本或文本和数字的组合。最多 255 个字符 | |
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 | AutoNumber 字段自动为每条记录分配自己的编号,通常从 1 开始 | 4 字节 |
Date/Time | 用于日期和时间 | 8 字节 |
Yes/No | 逻辑字段可以显示为是/否、真/假或开/关。在代码中,使用常量 True 和 False(相当于 -1 和 0)。 注释:是/否字段中不允许有空值 | 1 位 |
Ole Object | 可以存储图片、音频、视频或其他 BLOB(Binary Large OBjects) | 高达 1GB |
Hyperlink | 包含指向其他文件的链接,包括网页 | |
Lookup Wizard | 让您输入一个选项列表,然后可以从下拉列表中进行选择 | 4 字节 |