SQL 数据类型

2025年6月24日 | 阅读 11 分钟

SQL 中的数据类型用于表示数据库表中可以存储的数据的性质。它定义了列可以包含的值的类型,例如文本、数字或日期。

例如,在表的某一列中,如果我们想存储字符串类型的数据,那么我们就必须将该列声明为字符串数据类型。

SQL 数据类型的用途

SQL Data Types
  • 确保数据准确性: 减少不正确实体的风险,每列只存储适当类型的数据。
  • 改进数据验证: 它们会自动拒绝与定义数据类型不匹配的值,从而维护数据质量。
  • 高效存储: 为数据分配必要空间可降低存储成本。
  • 支持专用操作: 某些操作和功能仅适用于特定类型。
  • 改进数据库设计: 通过数据类型可以更准确地模拟现实世界场景。
  • 支持约束和关系: 它们与约束一起工作,以确保关系完整性。
  • 实现自动化和调度: 它们对于审计、调度任务、跟踪历史数据和日志记录非常重要。

对于每个数据库,数据类型主要分为三类:

SQL Data Types
  • 字符串数据类型

字符串数据类型存储字符序列,表示文本。它们用双引号括起来。它们用于处理文本数据。

  • 数值数据类型

数值数据类型存储数字,如小数、整数、浮点数等。这些数据类型用于执行数学运算,如加、减、乘、除等。它们用于处理分析数据。

  • 日期和时间数据类型

日期和时间数据类型存储有关日期和时间的信息。它们用于处理事件、时间戳等。

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 数据类型不仅可以防止未来的数据问题,还能为构建可扩展、安全且高效的数据库驱动应用程序奠定坚实的基础。


下一主题SQL 运算符