Skip to content

SQL 通用数据类型

数据类型(data type)定义了列(column)可以存储的值的种类,例如整数(integer)、字符串(character string)、日期/时间(date/time)或布尔值(boolean)。它还决定了可以对该数据执行的操作。

数据库表(database table)中的每一列(column)都必须有一个名称和一个数据类型(data type)。在创建表时,SQL 开发者决定每列将存储什么类型的数据。

数据类型是 SQL 理解每列中数据性质、存储方式以及如何与数据交互(例如,用于比较、计算或排序)的指导原则。

下表列出了一些 SQL 通用数据类型类别和常见的标准类型。请注意,具体的实现和名称可能因数据库系统而异。

通用数据类型类别 / ANSI SQL 类型描述
CHAR(n)固定长度的字符串,长度为 n。
VARCHAR(n)可变长度的字符串,最大长度为 n。
TEXT / CLOB用于存储大型文本数据的可变长度字符串。(名称各异:TEXT, CLOB, VARCHAR(MAX))
NCHAR(n), NVARCHAR(n), NTEXT用于存储 Unicode 字符串的本地字符版本(名称和可用性各异)。
BINARY(n)固定长度的二进制字符串,长度为 n。
VARBINARY(n)可变长度的二进制字符串,最大长度为 n。
BLOB / BYTEA用于存储大型对象(如图像或文件)的可变长度二进制数据。(名称各异:BLOB, BYTEA, VARBINARY(MAX), IMAGE (已弃用))
BOOLEAN存储 TRUE 或 FALSE 值。(实现各异:BIT, TINYINT(1), 原生 BOOLEAN)
INTEGER / INT整数数值数据(整数)。精度各异(例如:SMALLINT, INTEGER, BIGINT)。
DECIMAL(p,s) / NUMERIC(p,s)精确的数值数据,具有精度 p(总位数)和标度 s(小数点后的位数)。例如,DECIMAL(10,2) 可以存储 12345678.90 这样的数字。
FLOAT(p) / REAL / DOUBLE PRECISION近似数值数据(浮点数)。精度各异。
DATE存储日期值(年、月、日)。
TIME存储时间值(时、分、秒、毫秒)。可能包含时区。
TIMESTAMP / DATETIME存储日期和时间值。可能包含时区和毫秒。(DATETIME, DATETIME2, TIMESTAMP WITH/WITHOUT TIME ZONE)
INTERVAL表示一段时间间隔。
XML存储 XML 数据。
JSON存储 JSON 数据(在现代数据库中越来越常见)。
ARRAY同类型元素的有序集合(并非所有数据库都支持)。
UUID / GUID通用唯一标识符(Universally Unique Identifier,在许多系统中受支持)。

不同的数据库系统(database system)通常对数据类型有自己的名称和特定特性,即使是概念上相似的类型也是如此。下表显示了一些常用数据类型的常见映射。这是一份通用指南;请务必查阅您特定 RDBMS 的官方文档以获取准确和最新的信息。

常用数据类型映射(示例):

类别MS AccessSQL ServerOracleMySQLPostgreSQL
布尔值Yes/NoBIT(使用 NUMBER(1) 或 CHAR(1))BOOL, BOOLEAN (TINYINT(1) 的别名)BOOLEAN
整数Number (Integer, Long Int)INT, BIGINT, SMALLINT, TINYINTNUMBER(p,0), INTEGERINT, BIGINT, SMALLINT, TINYINTINTEGER, BIGINT, SMALLINT
精确小数Number (Decimal)DECIMAL(p,s), NUMERIC(p,s)NUMBER(p,s)DECIMAL(p,s), NUMERIC(p,s)NUMERIC(p,s), DECIMAL(p,s)
近似浮点数Number (Single, Double)FLOAT, REALBINARY_FLOAT, BINARY_DOUBLEFLOAT, DOUBLEREAL, DOUBLE PRECISION
货币CurrencyMONEY, SMALLMONEY(使用 NUMBER(p,s))(使用 DECIMAL(p,s))MONEY (固定精度)
固定长度字符串(使用 Short Text)CHAR(n), NCHAR(n)CHAR(n), NCHAR(n)CHAR(n)CHARACTER(n), CHAR(n)
可变长度字符串Short Text (<256), Long TextVARCHAR(n), NVARCHAR(n), VARCHAR(MAX), NVARCHAR(MAX)VARCHAR2(n), NVARCHAR2(n), CLOB, NCLOBVARCHAR(n), TEXT (及变体)VARCHAR(n), TEXT, CHARACTER VARYING(n)
仅日期Date/Time (格式为 Date)DATEDATE (包含时间,或使用 TRUNC)DATEDATE
日期和时间Date/TimeDATETIME2, DATETIME, SMALLDATETIME, DATETIMEOFFSETDATE (总是包含时间), TIMESTAMP (变体)DATETIME, TIMESTAMPTIMESTAMP (变体), TIMESTAMPTZ
二进制大型对象OLE Object (old), AttachmentVARBINARY(MAX), IMAGE (deprecated)BLOB, BFILEBLOB (及变体,如 LONGBLOB)BYTEA
重要说明:数据类型名称、支持的大小、精度和行为在不同的数据库系统之间可能存在显著差异。请务必查阅您使用的特定 RDBMS 的官方文档,以获取准确和最新的信息。