SQL 数据类型2025年6月24日 | 阅读 11 分钟 SQL 中的数据类型用于表示数据库表中可以存储的数据的性质。它定义了列可以包含的值的类型,例如文本、数字或日期。 例如,在表的某一列中,如果我们想存储字符串类型的数据,那么我们就必须将该列声明为字符串数据类型。 SQL 数据类型的用途 - 确保数据准确性: 减少不正确实体的风险,每列只存储适当类型的数据。
- 改进数据验证: 它们会自动拒绝与定义数据类型不匹配的值,从而维护数据质量。
- 高效存储: 为数据分配必要空间可降低存储成本。
- 支持专用操作: 某些操作和功能仅适用于特定类型。
- 改进数据库设计: 通过数据类型可以更准确地模拟现实世界场景。
- 支持约束和关系: 它们与约束一起工作,以确保关系完整性。
- 实现自动化和调度: 它们对于审计、调度任务、跟踪历史数据和日志记录非常重要。
对于每个数据库,数据类型主要分为三类:  字符串数据类型存储字符序列,表示文本。它们用双引号括起来。它们用于处理文本数据。 数值数据类型存储数字,如小数、整数、浮点数等。这些数据类型用于执行数学运算,如加、减、乘、除等。它们用于处理分析数据。 日期和时间数据类型存储有关日期和时间的信息。它们用于处理事件、时间戳等。 MySQL、SQL Server 和 Oracle 数据库中的数据类型众所周知,SQL 是一种结构化查询语言,用于与数据库通信。有各种数据库,SQL 用于与每个数据库通信,但 SQL 在一个数据库中的语法可能与另一个数据库略有不同,这就是 SQL 中的数据类型也可能有所不同的原因。在本文中,我们将讨论三个流行数据库——MySQL、SQL Server 和 Oracle 的 SQL 数据类型。 MySQL 数据类型MySQL 数据库中使用的数据类型列表。这基于 MySQL 8.0。 MySQL 字符串数据类型数据类型 | 描述 | 存储大小 |
---|
CHAR(n) | 用于指定固定长度的字符串,其中可以包含数字、字母和特殊字符。 | 其大小可以为 0 到 255 个字符(n 字节)。默认大小为 1。 | VARCHAR(n) | 用于指定可变长度的字符串,其中可以包含数字、字母和特殊字符。 | 其大小可以为 0 到 65535 个字符。 | BINARY(n) | 它等同于 CHAR(),但存储二进制字节字符串。 | 其 n 参数指定列的大小(n 字节)。默认值为 1。 | VARBINARY(n) | 它等同于 VARCHAR(),但存储二进制字节字符串。 | 其 n 参数指定最大列大小(以字节为单位)。 | TEXT | 它包含大量文本。 | 它包含最大长度为 65,535 个字符(最多 64KB)。 | TINYTEXT | 它包含非常小的文本。 | 它包含最大长度为 255 个字符(最多 255 字节)。 | MEDIUMTEXT | 它包含中等长度的文本。 | 它包含最大长度为 16,777,215 个字符(最多 16MB)。 | LONGTEXT | 它包含非常大的文本。 | 它包含最大长度为 4,294,967,295 个字符(最多 4GB)。 | ENUM (val1, val2, val3, ...) | 它是一个具有预定义值的字符串对象。ENUM 是列表的另一种说法,该列表是预定义的,并且值是从该列表中选择的。如果插入的不是列表中的值,则会插入一个空白值。 | 它在 ENUM 列表中包含 65535 个值。其大小最多为 1 或 2 字节。 | SET (val1, val2, val3, ....) | 它是一个字符串对象,可以包含多个值。您一次最多可以在 SET 列表中列出 64 个值。 | 其大小为 1-8 字节。 | BLOB(size) | 用于 BLOB(二进制大对象)。 | 它可以容纳多达 65,535 字节(最多 64KB)。 | TINYBLOB | 它包含非常小的二进制数据。 | 它包含最大长度为 255 个字符(最多 255 字节)。 | MEDIUMBLOB | 它包含中等长度的二进制数据。 | 它包含最大长度为 16,777,215 个字符(最多 16MB)。 | LONGBLOB | 它包含非常大的二进制数据。 | 它包含最大长度为 4,294,967,295 个字符(最多 4GB)。 |
MySQL 数值数据类型数据类型 | 描述 | 存储大小 |
---|
BIT(Size) | 用于位值类型。每个值中的位数由 size 指定。 | 其大小可以为 1 到 64 位。默认值为 1。 | INT(size) | 用于整数值。其有符号范围从 -2147483648 到 2147483647,无符号范围从 0 到 4294967295。size 参数指定最大显示宽度,为 255。 | 其大小最多为 4 字节。 | INTEGER(size) | 它等同于 INT(size)。 | 其大小最多为 4 字节。 | FLOAT(size, d) | 用于指定浮点数。其 size 参数指定总位数。小数点后的位数由 d 参数指定。 | 其大小最多为 4 字节。 | FLOAT(p) | 用于指定浮点数。MySQL 使用 p 参数来确定是使用 FLOAT 还是 DOUBLE。如果 p 为 0 到 24,则数据类型为 FLOAT()。如果 p 为 25 到 53,则数据类型为 DOUBLE()。 | FLOAT 为最多 4 字节,DOUBLE 为最多 8 字节。 | DOUBLE(size, d) | 它是一个普通大小的浮点数。其 size 参数指定总位数。小数点后的位数由 d 参数指定。 | 其大小最多为 8 字节。 | DECIMAL(size, d) | 用于指定定点数。其 size 参数指定总位数。小数点后的位数由 d 参数指定。size 的最大值为 65,默认值为 10。d 的最大值为 30,默认值为 0。 | 其大小最多为 9 字节。 | DEC(size, d) | 它等同于 DECIMAL(size, d)。 | 其大小最多为 9 字节。 | BOOL 或 BOOLEAN | 用于指定布尔值 true 和 false。零被视为 false,非零值被视为 true。 | 其大小最多为 1 字节。 |
MySQL 日期和时间数据类型数据类型 | 描述 | 存储大小 |
---|
DATETIME(fsp) | 用于指定日期和时间组合。其格式为 YYYY-MM-DD hh:mm:ss。其支持范围从 '1000-01-01 00:00:00' 到 9999-12-31 23:59:59'。 | 其大小最多为 8 字节。 | TIMESTAMP(fsp) | 用于指定时间戳。其值存储为自 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。 | 其大小最多为 4 字节。 | TIME(fsp) | 用于指定时间格式。其格式为 hh:mm:ss。其支持范围从 '-838:59:59' 到 '838:59:59'。 | 其大小最多为 3 字节。 | YEAR | 用于以四位数格式 (YYYY) 指定年份。其支持范围为 1901 到 2155,以及 0000。 | 其大小最多为 1 字节。 |
SQL Server 数据类型SQL Server 数据库中使用的数据类型列表。 SQL Server 字符串数据类型数据类型 | 描述 | 存储大小 |
---|
VARCHAR(N) | 它是一种可变宽度字符字符串数据类型。 | 其大小最多可达 8000 个字符。 | VARCHAR(MAX) | 它是一种非常大的可变宽度非 Unicode 字符字符串数据类型。 | 其大小最多可达 2GB 数据。 | NCHAR (N) | 它是一种固定宽度 Unicode 字符字符串数据类型。 | 其大小最多可达 4000 个字符。 | NVARCHAR | 它是一种可变宽度 Unicode 字符串数据类型。 | 其大小最多可达 4000 个字符。 | NVARCHAR (MAX) | 它是一种非常大的可变宽度 Unicode 字符串数据类型。 | 其大小最多可达 2GB。 | BINARY(N) | 它是一种固定宽度二进制字符串数据类型。 | 其大小最多可达 8000 字节。 | VARBINARY (N) | 它是一种可变宽度二进制字符串数据类型。 | 其大小最多可达 8000 字节。 | VARBINARY (MAX) | 它是一种大的可变宽度二进制字符串数据类型。 | 其大小最多可达 2GB。 | TEXT (已弃用) | 它是一种可变宽度字符字符串数据类型。 | 其大小最多可达 2GB 文本数据。 | NTEXT (已弃用) | 它是一种大的可变宽度 Unicode 字符串数据类型。 | 其大小最多可达 2GB 文本数据。 | IMAGE (已弃用) | 它也是一种可变宽度二进制字符串数据类型。 | 其大小最多可达 2GB。 |
SQL Server 数值数据类型数据类型 | 描述 | 存储大小 |
---|
比特 | 它是一个整数,可以是 0、1 或 null。 | 其存储大小为 1 字节。 | 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 字节。 | FLOAT(n) | 用于指定从 -1.79E+308 到 1.79E+308 的浮点精度数字数据。n 参数表示字段。 | 它可以容纳 4 到 8 字节的数据。n 的默认值为 53。 | DECIMAL (p,s)/ NUMERIC (p,s) | 它们用于定义从 -10^38 +1 到 10^38 -1 的固定精度和刻度数字。参数 p 表示小数点左侧和右侧的总位数。p 的值可以从 1 到 38。p 的默认值为 18。 参数 s 表示小数点右侧的最大位数。s 的值可以从 0 到 p。s 的默认值为 0。 | 其存储大小在 5 到 17 字节之间。 | REAL | 它是一种较小的浮点精度数字数据,范围从 -3.40E+38 到 3.40E+38。 | 其存储大小为 4 字节。 | MONEY | 用于指定从 -922,337,233,685,477.5808 到 922,337,203,685,477.5807 的货币数据。 | 其存储大小为 8 字节。 | SMALLMONEY | 用于指定从 -214,748.3648 到 214,748.3647 的小额货币数据。 | 其存储大小为 4 字节。 |
SQL Server 日期和时间数据类型数据类型 | 描述 | 存储大小 |
---|
DATE | 用于仅存储日期。其格式为 YYYY-MM-DD。它支持从 0001-01-01 到 9999-12-31 的范围。 | 其存储大小为 3 字节。 | TIME | 它仅存储时间,精度为 100 纳秒。其格式为 hh:mm:ss。 | 其存储大小为 3 到 5 字节。 | DATETIME | 用于指定日期和时间组合。它支持从 1753-01-01 到 9999-12-31 的范围,精度为 3.33 毫秒。 | 其存储大小为 8 字节。 | SMALLDATETIME | 用于存储从 1900-01-01 到 2079-06-06 的日期和时间。 | 其存储大小为 4 字节。 | DATETIME2 | 用于指定日期和时间组合。它支持从 0001-01-01 到 9999-12-31 的范围,精度为 100 纳秒。 | 其存储大小为 6 到 8 字节。 | datetimeoffset | 它与 datatime2 相同,但具有时区偏移感知功能。 | 其存储大小为 8 到 10 字节。 | TIMESTAMP | 当新行被创建或修改时,它会存储一个唯一的数字。时间戳值基于内部时钟,不对应真实时间。每张表只能包含一个时间戳变量。它已弃用日期/时间使用,但用于行版本控制,而非实际时间戳。 | 其存储大小为 8 字节。 |
SQL Server 其他数据类型数据类型 | 描述 | 存储大小 |
---|
SQL_VARIANT | 用于存储各种数据类型,但文本、时间戳、ntext 等除外。它存储多达 8000 字节的数据。 | 其存储大小取决于存储的数据类型。最大可达 8016 字节。 | XML | 它存储 XML 格式的数据。 | 其存储大小最多为 2GB。 | CURSOR | 存储一个用于数据库操作的游标的引用。 | 它没有直接的大小,因为它在内部使用。 | TABLE | 存储一个包含表结构的变量。 | 取决于表定义。 | UNIQUEIDENTIFIER | 存储 GUID(全局唯一标识符)。 | 其存储大小为 16 字节。 |
Oracle 数据类型Oracle 数据库中使用的数据类型列表。 Oracle 字符串数据类型数据类型 | 描述 | 存储大小 |
---|
CHAR(size) | 用于在预定义长度内存储字符数据。 | 最多可存储 2000 字节。 | NCHAR(size) | 用于在预定义长度内存储国家字符数据。 | 最多可存储 2000 字节。 | VARCHAR2(size) | 用于在预定义长度内存储可变字符串数据。 | 最多可存储 4000 字节。 | VARCHAR(SIZE) | 它与 VARCHAR2(size) 相同。您也可以使用 VARCHAR(size),但建议使用 VARCHAR2(size)。 | 最多可存储 4000 字节。 | NVARCHAR2(size) | 用于在预定义长度内存储 Unicode 字符串数据。我们必须指定 NVARCHAR2 数据类型的大小。 | 最多可存储 4000 字节。 |
Oracle 数值数据类型数据类型 | 描述 | 存储大小 |
---|
NUMBER(p, s) | 它由精度 p 和刻度 s 组成。精度 p 的范围可以从 1 到 38,刻度 s 的范围可以从 -84 到 127。 | 取决于精度,范围为 1 到 22 字节。 | NUMBER | 它是一个通用数字。 | 其大小最多为 22 字节。 | FLOAT(p) | 它是 NUMBER 数据类型的一个子类型。精度 p 的范围可以从 1 到 126。 | 其大小最多为 22 字节。 | BINARY_FLOAT | 用于二进制精度(32 位)。 | 其大小为 4 字节。 | BINARY_DOUBLE | 用于双精度二进制(64 位)。 | 其大小为 8 字节。 |
Oracle 日期和时间数据类型数据类型 | 描述 | 存储大小 |
---|
DATE | 用于存储有效的日期时间格式,长度固定。其范围从公元前 4712 年 1 月 1 日到公元 9999 年 12 月 31 日。 | 其存储大小为 7 字节。 | TIMESTAMP | 用于以 YYYY-MM-DD 格式存储有效日期,时间格式为 hh:mm:ss。 | 其存储大小为 7 到 11 字节。 |
Oracle LOB(大型对象)数据类型数据类型 | 描述 | 存储大小 |
---|
BLOB (二进制 LOB) | 用于定义非结构化二进制数据。 | 其范围最大可达 232-1 字节或 4 GB。 | BFILE (二进制文件) | 用于将二进制数据存储在外部文件中。 | 其范围最大可达 232-1 字节或 4 GB。 | CLOB (字符 LOB) | 用于单字节字符数据。 | 其范围最大可达 232-1 字节或 4 GB。 | NCLOB (国家字符 LOB) | 用于在国家字符集中存储大型 Unicode 字符数据(多字节)。 | 其范围最大可达 232-1 字节或 4 GB。 | RAW(size) | 用于定义可变长度的原始二进制数据。 | 每行最多可达 2000 字节。 | LONG RAW | 用于定义大型可变长度的原始二进制数据。 | 每行最多可达 231-1 字节或 2 GB。 |
结论选择每个列的正确数据类型非常重要,因为数据类型在确保数据质量、系统可靠性和查询性能方面起着至关重要的作用。这些数据类型是关系数据库中数据存储、检索和验证的基础。 每种类型都有其独特的用途,并带有自己的优点和局限性。理解并应用正确的数据类型可以使您的系统运行更快、更易于维护,无论您是在设计新数据库还是优化现有数据库。 掌握SQL 数据类型不仅可以防止未来的数据问题,还能为构建可扩展、安全且高效的数据库驱动应用程序奠定坚实的基础。 |