MySQL、SQL Server 和 MS Access 的 SQL 数据类型
列的数据类型定义了该列可以包含的值:整数、字符、货币、日期和时间、二进制等。
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 |
用于 BLOBs(Binary Large Objects,二进制大型对象)。 最大长度:255 字节。 |
| TINYTEXT | 最多可以包含 255 个字符的字符串。 |
| TEXT(size) | 最多可以包含 65,535 字节的字符串。 |
| BLOB(size) |
用于 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(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 | 0 被视为 false,非零值被视为 true。 |
| 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 epoch ('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 数据类型
字符串数据类型
| 数据类型 | 描述 | 最大容量 | 存储 |
|---|---|---|---|
| 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 字节的各种数据类型的数据,文本、ntext 和时间戳除外。 |
| uniqueidentifier | 存储全局唯一标识符 (GUID)。 |
| xml | 存储 XML 格式化数据。最大 2GB。 |
| cursor | 存储对用于数据库操作的游标的引用。 |
| table | 存储结果集以供稍后处理。 |
MS Access 数据类型
| 数据类型 | 描述 | 存储 | |
|---|---|---|---|
| Text | 用于文本或文本和数字组合。 | 最多 255 个字符。 | |
| Memo |
用于大量文本。 最多可存储 65,536 个字符。 注意:您无法对 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 |
逻辑字段可以显示为是/否、真/假或开/关。 在代码中,使用常量 True 和 False(相当于 -1 和 0)。 注意:在 Yes/No 字段中不允许 Null 值。 |
1 比特。 | |
| Ole Object | 可以存储图片、音频、视频或其他 BLOBs(大二进制对象)。 | 最多 1GB。 | |
| Hyperlink | 包含指向其他文件(包括网页)的链接。 | ||
| Lookup Wizard | 让您键入一个选项列表,然后可从下拉列表中选择。 | 4 字节。 |