PostgreSQL中的数据类型
-
-
- PostgreSQL中的数据类型
- 概述
- 数据的输入和类型转换
- 数据类型详解
- 整型
- 布尔类型
- 字符类型
- 时间类型
- 枚举类型
- money类型
- bytea类型
- 数组类型
- 其它类型
- 参考资料
概述
PostgreSQL支持丰富的数据类型,从简单数据类型int、char varying(n)、date等类型,到复杂的xml、json、range类型,在数据库中支持的数据类型可谓独树一帜,那么学习PostgreSQL最重要的问题之一就应该是熟悉其数据类型,本文将从数据类型的使用角度对PostgreSQL的数据类型进行详细的讲述,统计了PostgreSQL中有41种数据类型。
数据的输入和类型转换
在正式学习PostgreSQL的数据类型之前,我们先来看一下怎么在SQL语句中输入相应的数据类型。
$ select 1+2 ;
- 复杂数据类型 数据类型 ‘对应类型的值’
看下面的例子:
$ select date '2016/7/17' ;
- 风格统一的数据输入方式
不论是简单的数据类型还是复杂的数据类型,我们都采用:数据类型 '对应数据类型的值'
格式来输入数据。
看下面的例子:
$ select int '1' + int '2' ;
- PostgreSQL中的数据类型转换
PostgreSQL中支持使用SQL标准的强制类型转换函数CAST进行类型转换。看下面的例子:
$ select CAST('5' as int),CAST('2016/7/17' as date) ; #将'5'转换为int类型准确的讲是int4类型 将'2016/7/17'转换为日期类型
数据类型详解
在数据库中处理数据,最重要的部分就是对不同数据类型的处理,这个部分是PostgreSQL中最重要的部分之一,应该认真的掌握其中的内容。
整型
这是所有的编程语言中最简单、最常用的数据类型,在我们平时的编程中使用的最多,在此不再详述。
布尔类型
和任何语言中的布尔数据类型一样,在PostgreSQL中的不忍类型的取值也为true或者false,当然如果处于未知的状态使用NULL表示,boolean在SQL中可以用不带引号的TRUE或者FALSE表示,也可以使用更多的表示真和假的带引号的字符表示如’true’、’false’、’yes’、’no’、’t’、’f’、’y’、’n’、’TruE’、’tRUe’、’on’、’off’等等来表示,布尔类型可采用的值是有限的,具体请参见文档: https://www.postgresql.org/docs/9.5/static/datatype-boolean.html 。在PostgreSQL数据库中布尔类型是三值的布尔逻辑,三值分别为:TRUE、FALSE、NULL,其中NULL代表的是UNKNOWN,布尔类型在底层存储时占一个字节。
字符类型
在PostgreSQL中字符类型有三种,分别是:varchar(n)、char(n)、text(最多存储1GB的数据),在前面的两种类型中n分别指的是存储的字符的个数,不是字节数,一定要注意,这点和Oracle中是不同的,比如下面的例子:
create table test(name varchar(4));
insert into test values('朱君鹏呀');
insert into test values('zjp1'); #对于上面的两种情况,实际上在存储时存储的字节数一定是不同的,但是在PostgreSQL中计算的是存储的字符数,对于插入的这两个值,全部都是4个字符,但是字节数肯定是不同的。
结论:在PostgreSQL中,我们在SQL语句中可用的字符类型,其中n的大小全部指的是字符的个数,而不是存储的字节的个数,一定要注意。
时间类型
- timestamp without time zone
- timestamp with time zone
- time without time zone
- time with time zone
- date
- interval(时间间隔类型)
枚举类型
在各种编程语言中,枚举类型在限制类型取值时是最好的选择,下面将简单的介绍枚举类型的使用。
$ create type 枚举类型名称 as ENUM('值1','值2'...); #枚举类型的值不能超过63个字符
$ create table test(属性 枚举类型); $ insert into test values('值1'); #正确
$ insert into test values('非枚举类型值'): #只能插入在定义枚举类型时限定的值,error:Invalid value $ alter type 枚举类型名称 add value '增加的枚举类型值' before[after] '已经存在的某个枚举类型' #向已经定义的枚举类型中增加可选的值,但是目前PostgreSQL中语法还不支持删除枚举值的操作,可参考: http://pgguide.lxneng.com/sexy/enums.html $ select t.typname,e.enumlabel from pg_type t,pg_enum e where t.oid = e.enumtypid; #列出所有的你定义的枚举类型和该类型的取值,这个命令是通用的查看枚举类型和值得SQL语句
money类型
只是在字符的前面加了一个$或者¥符号而已,不要以为它有多么的神奇。
bytea类型
参见官方文档 https://www.postgresql.org/docs/9.0/static/datatype-binary.html , 在平时我们可能用的不是很多。
数组类型
在PostgreSQL中的数组类型不限长度也不限制维度,该类型被作为数学中的矩阵,非常重要的类型。参考: http://blog.163.com/digoal@126/blog/static/163877040201201275922529/
其它类型
- 几何类型
- 网络地址类型
- bit类型
- 全文检索类型
- xml类型
- uuid类型
参考资料
- 官方数据类型参考文档: https://www.postgresql.org/docs/9.5/static/datatype.html