Postgresql中的数据类型
概述
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' ;
$ 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类型