0
点赞
收藏
分享

微信扫一扫

MySQL & PostgreSQL 常用数据类型

龙毓七七 2022-02-08 阅读 51

MySQL & PostgreSQL 常用数据类型

MySQL & PostgreSQL

本文章所有资料均来自 MySQL 5.7 文档1与 PostgreSQL 10 文档2

常用数据类型

数字类型

整数类型

数据类型MySQLPostgreSQL
INT2SMALLINT 的别名SMALLINT 的别名
SMALLINT2 字节整数,SMALLINT(6) 的别名*2 字节整数
INT4 字节整数,INT(11) 的别名*INTEGER 的别名
INT4INT 的别名INTEGER 的别名
INTEGERINT 的别名4 字节整数
BIGINT8 字节整数,BIGINT(20) 的别名*8 字节整数
INT8BIGINT 的别名BIGINT 的别名

*在MySQL中,SMALLINT、INT和BIGINT的参数为显示宽度。

字节数范围范围
1(-27, 27-1)(-128, 127)
2(-215, 215-1)(-32768, 32767)
4(-231, 231-1)(-2147483648, 2147483647)
8(-263, 263-1)(-9223372036854775808, 9223372036854775807)

定点数类型(任意精度)

数据类型MySQLPostgreSQL
DECDECIMAL 的别名NUMERIC 的别名
DEC(precision, scale = 0)DECIMAL(precision, scale) 的别名NUMERICL(precision, scale) 的别名
DECIMALDECIMAL(10) 的别名NUMERIC 的别名
DECIMAL(precision, scale = 0)可选精度的精确数字precision: (0, 65), scale: (0, 30)NUMERICL(precision, scale) 的别名
NUMERICDECIMAL 的别名精确数字
NUMERIC(precision, scale = 0)DECIMAL(precision, scale) 的别名可选精度的精确数字precision: (0, 1000), scale: (0, 1000)

(precision >= scale),其中 precision 为数字位数,scale 为小数位数。

浮点数类型

数据类型MySQLPostgreSQL
FLOAT单精度浮点数 (4 字节)DOUBLE PRECISION 的别名
FLOAT(precision)FLOAT 的别名,precision: (0, 24)REAL 的别名,precision: (1, 24)
DOUBLE 的别名*precision: (25, 53)DOUBLE PRECISION 的别名,precision: (25, 53)
FLOAT4FLOAT 的别名REAL 的别名
REALDOUBLE 的别名*单精度浮点数 (4 字节)
DOUBLE PRECISIONDOUBLE 的别名*双精度浮点数 (8 字节)
FLOAT8DOUBLE 的别名*DOUBLE PRECISION 的别名

*在MySQL中,DOUBLE为双精度浮点数(8字节)。

序数类型

数据类型MySQLPostgreSQL
SERIALBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE 的别名INTEGER NOT NULL DEFAULT nextval(‘tablename_colname_seq’) 的别名

布尔类型

数据类型MySQLPostgreSQL
BOOLTINYINT(1) 的别名*BOOLEAN 的别名
BOOLEANTINYINT(1) 的别名*逻辑布尔值(真/假)

状态为真的值为 TRUE* 或 '1',状态为假的值为 FALSE* 或 '0'

*在MySQL中,TINYINT为1字节整数,其参数为显示宽度。

*在MySQL中,TRUE是1的别名,FALSE是0的别名。

字符串类型

数据类型MySQLPostgreSQL
CHAR(length = 1)定长字符串length: (0, 255)CHARACTER(length) 的别名
CHARACTER(length = 1)CHAR(length) 的别名定长字符串length: (1, 10485760)
NATIONAL CHAR(length = 1)CHAR(length) CHARACTER SET utf8 的别名3CHARACTER(length) 的别名
NATIONAL CHARACTER(length = 1)CHAR(length) CHARACTER SET utf8 的别名3CHARACTER(length) 的别名
NCHAR(length = 1)CHAR(length) CHARACTER SET utf8 的别名3CHARACTER(length) 的别名
CHAR VARYING(length)VARCHAR(length) 的别名CHARACTER VARYING(length) 的别名
CHARACTER VARYING(length)VARCHAR(length) 的别名变长字符串length: (1, 10485760)
NATIONAL CHAR VARYING(length)VARCHAR(length) CHARACTER SET utf8 的别名3CHARACTER VARYING(length) 的别名
NATIONAL CHARACTER VARYING(length)VARCHAR(length) CHARACTER SET utf8 的别名3CHARACTER VARYING(length) 的别名
NCHAR VARYING(length)VARCHAR(length) CHARACTER SET utf8 的别名3CHARACTER VARYING(length) 的别名
VARCHAR(length)变长字符串,(length >= 0)CHARACTER VARYING(length) 的别名
TEXT字符串,最大长度为 65535 (216-1) 个字节无限长字符串

length 为字符个数。

日期 / 时间类型

数据类型MySQLPostgreSQLISO 8601 格式值
DATE日期日期'YYYY-MM-DD'
TIMETIME(0) 的别名TIME(6) 的别名'hh:mm:ss'
TIME(precision)时间时间'hh:mm:ss.ssssss'
TIMESTAMPTIMESTAMP(0) 的别名TIMESTAMP(6) 的别名'YYYY-MM-DDThh:mm:ss'
TIMESTAMP(precision)时间戳时间戳'YYYY-MM-DDThh:mm:ss.ssssss'

precision: (0, 6),其为秒的小数位数。

JSON 类型

数据类型实例值
JSON'[{"key":"value"}]'

位串类型

数据类型MySQLPostgreSQL实例值
BIT(length = 1)位串length: (1, 64)位串length: (1, 83886080)b'0110'B'0110'

JSON 类型示例

创建表格

DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(
    id SERIAL,
    json_data JSON,
    PRIMARY KEY (id)
);
INSERT INTO my_table(json_data) VALUES('[{"key":"value"}]');
SELECT * FROM my_table;

查询 JSON 数据

MySQL

以 JSON 形式获取 JSON 元素:4

SELECT 
    json_data->'$[0].key'
FROM
    my_table;

以文本形式获取 JSON 元素:4

SELECT 
    json_data->>'$[0].key'
FROM
    my_table;

PostgreSQL

以 JSON 形式获取 JSON 元素:5

SELECT
    json_data->0->'key'
FROM
    my_table;

以文本形式获取 JSON 元素:5

SELECT
    json_data->0->>'key'
FROM
    my_table;

  1. MySQL 5.7: Data Types ↩︎

  2. PostgreSQL10: Data Types ↩︎

  3. MySQL 5.7: The National Character Set ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  4. MySQL 5.7: JSON Function Reference ↩︎ ↩︎

  5. PostgreSQL10: JSON Functions and Operators
    ↩︎ ↩︎

举报

相关推荐

0 条评论