SQL数据类型

MySQL

数值类型

类型说明
BIT(size)size=[1,64](1)
TINYINT(size)8-bit int
SMALLINT(size)16bit int
MEDIUMINT(size)24bit int
INT(size)32bit int, as INTEGER(size)
BIGINT(size)64bit int
FLOAT(p)$p\le 24$ as FLOAT()
$25\le p\le53$ as DOUBLE()
DOUBLE(size, d)size: number of total digits
d: 小数点后位数
DECIMAL(size, d)as DEC(size, d)
BOOLas BOOLEAN,
zero (false) or nonzero (true)

DOUBLE PRECISION(size, d)

可选属性

UNSIGNED ZEROFILL:用于显示格式,告知MySQL用0将数值的空格补齐,而不是空着。ZEROFILL也会自动添加UNSIGNED属性。整形数据后面括号中的数表示数据的显示宽度。当数据的宽度小于显示宽度的时候将会使用空格补齐,如果声明了ZEROFILL,则以0填充;如果数据的宽度大于显示宽度,则按数据的实际宽度显示。 AUTO_INCREMENT:用于类型为整数的列,且一个表中只能有一列可以有该属性,当插入的行的该列的值为NULL,该列的值会被自动设置成该列的最大值加1。对于要使用AUTO_INCREMENT属性的列,应该定义为NOT_NULL,并定义为PRIMARY KEY或定义为UNIQUE。可按下列方式定义AUTO_INCREMENT列:

CREATE TABLE table_name(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY);
CREATE TABLE table_name(id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id));
CREATE TABLE table_name(id INT AUTO_INCREMENT NOT NULL, UNIQUE(id));

字符串数据

类型说明
CHAR(size)size=[0,255](1)固定长度,填充空白(读取时移除填充)
VARCHAR(size)size=[0,65535]储存长度和值,最大长度还受限于行记录最大长度65535以及使用的编码方法。
TINYTEXT[0,255]
TEXT(size)size=[0,65535]
MEDIUMTEXT[0,16777215]16MB
LONGTEXT[0,4294967295]4GB,字符数限制与编码方法相关。
SET(val1, ...)枚举字符串(最多64个)
ENUM(val1, ...)枚举字符串(最多65535个)

字符串类型列声明时可指定字符集的属性(覆盖数据库默认属性):

CREATE TABLE t
(
    c1 VARCHAR(20) CHARACTER SET utf8mb4,
    c2 TEXT CHARACTER SET latin1 COLLATE latin1_general_cs
);

JSON数据类型

使用JSON数据类型相比于字符串类型有以下优点:

  • 自动校验;
  • 优化存储格式,支持快速访问(直接通过建或索引访问子对象,无需读取整个JSON文档)。

JSON类型的存储空间需求与LONGTEXT相似。

CREATE TABLE t1 (jdoc JSON);
INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');

JSON_ARRAY():构造JSON数组。

JSON_OBJECT():构造JSON对象。

The UPDATE statement uses any of the three functions JSON_SET(), JSON_REPLACE(), or JSON_REMOVE() to update the column.

The input column and the target column must be the same column; a statement such as UPDATE mytable SET jcol1 = JSON_SET(jcol2, '$.a', 100) cannot be performed as a partial update.

MySQL :: MySQL 8.0 Reference Manual :: 11.5 The JSON Data Type

Binary类型

与相应的字符串类型类似,但存储字节串。

类型说明
BINARY(size)
VARBINARY(size)
TINYBLOB
BLOB(size)
MEDIUMBLOB
LONGBLOB

日期时间类型:

类型说明
DATEYYYY-MM-DD
DATETIME(fsp)YYYY-MM-DD hh:mm:ss
TIMESTAMP(fsp)
TIME(fsp)hh:mm:ss
YEAR1901-2155, 0000

PostgreSQL

SQL Server

字符类型

Data typeDescriptionMax sizeStorage
char(n)定长字符序列8000 charsn chars
varchar(n)变长字符序列8000 chars2+n chars
varchar(max)变长字符序列1073741824 chars2+n chars
text变长字符序列2GB of text data4+n chars
nchar
nvarchar
定长Unicode字符串4000 chars2n bytes
nvarchar(max)变长Unicode字符串536870912 chars
ntext变长Unicode字符串2GB of text data

Binary类型:

Data typeDescriptionMax sizeStorage
binary(n)定长字节序列8,000 bytes
varbinary变长字节序列8,000 bytes
varbinary(max)变长字节序列2GB
image变长字节序列2GB

数值类型:

Data typeDescriptionStorage
bit0, 1, or NULL
tinyint8-bit int 0 to 2551 byte
smallint16-bit int, -32,768 and 32,7672 bytes
int32-bit int4 bytes
bigint64-bit int8 bytes
decimal(p,s)5-17 bytes
numeric(p,s)5-17 bytes
smallmoneyMonetary data4 bytes
moneyMonetary data8 bytes
float(n)4 or 8 bytes
real4 bytes

日期时间类型:

Data typeDescriptionStorage
datetime1753/1/1-9999/12/31 , 3.33 milliseconds8 bytes
datetime20001/1/1-9999/12/31, accuracy of 100 nanoseconds6-8 bytes
smalldatetime1900/1/1-2079/6/6, accuracy of 1 minute4 bytes
date0001/1/1-9999/12/31 , date only3 bytes
timetime only, accuracy of 100 nanoseconds3-5 bytes
datetimeoffsetas datetime2 ,with time zone offset8-10 bytes
timestamp