字符串类型
PostgreSQL中字符串类型指 char、varchar和text。
类型说明
char(n)/character(n)
固定长度非二进制字符串,不足补空白
varchar(n)/character varying(n)
变长非二进制字符串,有长度限制
text
变长非二进制字符串,无长度限制
在PostgreSQL中,这三种类型的字符串数据并没有明显的性能差别,而character(n)类型的数据因为固定长度导致更多的存储空间。所以,一般来说,推荐使用text或者character varying就行了。
create table tmp_str(ch char(4),vch varchar(4),txt text);
insert into tmp_str values ('ab','cd','efghijklmn');
数组类型
PostgreSQL允许将字段定义成变长的多维数组, 数组类型可以是任何基本类型或用户定义类型。
为说明这些用法,我们先创建一个由基本类型数组构成的表
create table tmp_array(name text,pay_by_quarter integer[5],schedule text[][]);
如上所示,一个数组类型是通过在数组元素类型名后面附加中括号([])来命名的。目前,PostgreSQL并不强制声明数组的长度,所以上述声明长度和不声明长度是一样的。特定元素类型的数组都被认为是相同的类型, 不管他们的大小或者维数。
数组类型的使用
#插入数据
insert into tmp_array values ('array test','{1,2,3}','{{"meeting", "lunch"}, {"training", "presentation"}}');
#查询
select name from tmp_array where pay_by_quarter[1] <> pay_by_quarter[2];
select pay_by_quarter[3] from tmp_array;
二进制类型
PostgreSQL提供了bytea类型,用来存储二进制字符串
|数据类型|说明|长度|
|-||
|bytea|变长的二进制字符串|4字节加上实际的二进制字符串长度|
二进制字符串是一个字节序列。二进制字符串和普通字符字符串的区别有两个:
二进制字符串完全可以存储字节零值以及其它"不可打印的" 字节(定义在 32 到 126 范围之外的字节)。字符串不允许字节零值, 并且也不允许那些不符合选定的字符集编码的非法字节值或者字节序列。
对二进制字符串的处理实际上就是处理字节,而对字符串的处理则取决于区域设置。 简单说,二进制字符串适用于存储那些程序员认为是"原始字节"的数据, 而字符串适合存储文本。
布尔类型
PostgreSQL支持SQL标准的 boolean数据类型。 boolean只能有 true/false/unknown(用NULL表示)三种状态。
|数据类型|说明|占用空间|
|-||
|boolean|true/false/unknown|1个字节(以t或f存储)
代表真和假的有效文本,真(true/t/yes/y/on/1) 假(false/f/no/n/off/0)
create table test1 (a boolean, b text);
insert into test1 values ('t','this value is true'),('off','this value is false');
二 . 如何选择数据类型
1 . 整数与浮点数
整数 : 不需要小数部分
浮点数 : 需要小数部分
2 . 日期与时间类型
time : 时间
date : 日期
timestamp : 日期 + 时间
3 . char 和 varacter 的特点选择
char : 固定长度字符
varacter : 可变长度字符
三 . 常见运算符
1 . 运算符
(1) . 算术运算符
+ - / * %(求余)
(2) . 比较运算符
> < >= <= != IN LIKE LEAST BENTWEEN AND GREATEST
(3) . 逻辑运算符
TRUE FALSE AND OR NOT
总结 :
(4) . 位运算符
& | ~ ^ << >>
2 . 规则
①、 如果有一个或是两个参数为null,那么比较的结果为空;
②、若同一个运算符中两个参数都是字符串,那么比较结果按照字符串进行比较;
③、如果两个参数均为整数,那么在比较的时候会按照整数类型来比较;
④、如果一个字符串和数值类型进行比较,那么PostgreSQL数据库会自动将字符串类型转换成数值进行比较。
运算符的优先级: