数据类型分类
分类名称
|
说明
|
与其他数据库的对比
|
---|---|---|
布尔类型 | PG支持SQL标准的boolean数据类型 | 与MySQL中的bool、boolean类型相同,占用1字节存储空间 |
数值类型 | 整数类型有2字节的smallint、4字节的int、8字节的bigint;精确类型的小数有numeric;非精确类型的浮点小数有real和double precision;还有8字节的货币(money)类型 | 无MySQL中的unsigned整数类型,也无MySQL中1字节长的mediumint整数类型 |
字符类型 | 有varchar(n)、char(n)、text3中类型 | PG中的varchar(n)最大可以存储1GB,而MySQL中的varchar(n)最大只能是64KB。PG中的text类型相当于MySQL中的longtext类型 |
二进制数据类型 | 只有一种bytea类型 | 对应MySQL中的blob和longblob类型 |
位串类型 | 位串就是一串由1和0组成的字符串,有bit(n)、bit varying(n)两种类型 | MySQL也支持此类型。不过PG可以支持更长的bit位,最长可以支持83886080个bit位 |
日期和时间类型 | 有date、time、timestamp,而time和timestamp又根据是否包括时区分为两种类型 | 在PG中,可以精确到秒以下,如毫秒,而MySQL5.6也可以精确到毫秒,不过日期时间的范围与MySQL差异比较大 |
枚举类型 | 枚举类型是一个包含一系列有序静态值的集合的数据类型,相当于某些编程语言中的enum类型 | PG使用枚举类型前需要先使用CREATE TYPE语句来创建该类型;MySQL中也有枚举类型(enum) |
几何类型 | 包括点(point)、直线(line)、线段(lseg)、路径(path)、多边形(polygon)、圆(cycle)等类型 | PG中特有的类型,其他数据库一般没有此类型,可以认为是一种数据库内置的自定义类型 |
网络地址类型 | 有cidr、inet、macaddr3种类型 | PG中特有的类型,其他数据库一般没有此类型,可以认为是一种数据库内置的自定义类型 |
数组类型 | 可以存储一个数组 | PG中特有的类型,其他数据库一般没有此类型 |
复合类型 | 可以把已有的简单类型组合成用户自定义的类型,如C语言中的结构体一样 | 对应其他数据库的自定义类型 |
xml类型 | 可以存储XML数据的类型 | N/A |
JSON/JSONB类型 | 可以存储JSON数据的类型 | N/A |
range类型 | 范围类型,可以存储范围数据 | 其他数据库中无此类型 |
对象标识符类型 | PG内部标识对象的类型,如oid类型、regproc类型、regclass类型等 | N/A |
伪类型 | 伪类型不能作为字段的数据类型,但是它可以用于声明函数的参数或者结果的类型。有any、anyarray、anyelement、cstring、internal、language_handler、record、trigger、void、opaque等10种类型 | N/A |
其他类型 | 一些不易分类的类型都放到这里,如UUID类型、pg_lsn类型等 | N/A |
为了提高SQL的兼容性,部分数据类型还有很多别名:
- interger类型:可以用int、int4表示
- smallint类型:可以用int2表示
- char carying(n)可以用varchar(n)表示
- numeric(m,n)可以用decimal(m,n)表示
数据类型的输入与转换
简单数据类型,如数字和字符串,使用一般方法输入即可:
复杂数据类型,可以按照“类型名”加上单引号括起来的类型值格式来输入:
PG支持用标准SQL的数据类型转换函数CAST来进行数据类型转换:
PG还支持一种更简捷的类型转换方式,即双冒号方式: