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 digitsd : 小数点后位数 |
DECIMAL(size, d) | as DEC(size, d) |
BOOL | as 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 functionsJSON_SET()
,JSON_REPLACE()
, orJSON_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 |
日期时间类型:
类型 | 说明 | |
---|---|---|
DATE | YYYY-MM-DD | |
DATETIME(fsp) | YYYY-MM-DD hh:mm:ss | |
TIMESTAMP(fsp) | ||
TIME(fsp) | hh:mm:ss | |
YEAR | 1901-2155, 0000 |
PostgreSQL
SQL Server
字符类型
Data type | Description | Max size | Storage |
---|---|---|---|
char(n) | 定长字符序列 | 8000 chars | n chars |
varchar(n) | 变长字符序列 | 8000 chars | 2+n chars |
varchar(max) | 变长字符序列 | 1073741824 chars | 2+n chars |
text | 变长字符序列 | 2GB of text data | 4+n chars |
nchar nvarchar | 定长Unicode字符串 | 4000 chars | 2n bytes |
nvarchar(max) | 变长Unicode字符串 | 536870912 chars | |
ntext | 变长Unicode字符串 | 2GB of text data |
Binary类型:
Data type | Description | Max size | Storage |
---|---|---|---|
binary(n) | 定长字节序列 | 8,000 bytes | |
varbinary | 变长字节序列 | 8,000 bytes | |
varbinary(max) | 变长字节序列 | 2GB | |
image | 变长字节序列 | 2GB |
数值类型:
Data type | Description | Storage |
---|---|---|
bit | 0, 1, or NULL | |
tinyint | 8-bit int 0 to 255 | 1 byte |
smallint | 16-bit int, -32,768 and 32,767 | 2 bytes |
int | 32-bit int | 4 bytes |
bigint | 64-bit int | 8 bytes |
decimal(p,s) | 5-17 bytes | |
numeric(p,s) | 5-17 bytes | |
smallmoney | Monetary data | 4 bytes |
money | Monetary data | 8 bytes |
float(n) | 4 or 8 bytes | |
real | 4 bytes |
日期时间类型:
Data type | Description | Storage |
---|---|---|
datetime | 1753/1/1-9999/12/31 , 3.33 milliseconds | 8 bytes |
datetime2 | 0001/1/1-9999/12/31 , accuracy of 100 nanoseconds | 6-8 bytes |
smalldatetime | 1900/1/1-2079/6/6 , accuracy of 1 minute | 4 bytes |
date | 0001/1/1-9999/12/31 , date only | 3 bytes |
time | time only, accuracy of 100 nanoseconds | 3-5 bytes |
datetimeoffset | as datetime2 ,with time zone offset | 8-10 bytes |
timestamp |