`
i_am_birdman
  • 浏览: 280723 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

PostgreSql简单数据类型(PostgreSql学习笔记4)

阅读更多

8-2. 数值类型

名字

存储空间

描述

范围

smallint

2 字节

小范围整数

-32768 +32767

integer

4 字节

常用的整数

-2147483648 +2147483647

bigint

8 字节

大范围的整数

-9223372036854775808 9223372036854775807

decimal

变长

用户声明精度,精确

无限制

numeric

变长

用户声明精度,精确

无限制

real

4 字节

变精度,不精确

6 位十进制数字精度

double precision

8 字节

变精度,不精确

15 位十进制数字精度

serial

4 字节

自增整数

1 2147483647

bigserial

8 字节

大范围的自增整数

1 9223372036854775807

 

numeric 类型可以存储最多 1000 位精度的数字并且准确地进行计算。我们特别建议将它用于货币金额和其它要求精确计算的场合。不过,numeric 类型上的算术运算比整数类型或者我们下一节描述的浮点数类型要慢很多。

在随后的内容里,我们使用下述术语:一个 numeric 类型的标度(scale) 是小数部分的位数,精度(precision) 是全部数据位的数目,也就是小数点两边的位数总和。因此数字 23.5141 的精度为 6 而标度为 4 。你可以认为整数的标度为零。

numeric 字段的最大精度和最大标度都是可以配置的。要声明一个字段的类型为 numeric ,你可以用下面的语法:

NUMERIC(precision , scale )

精度必须为正数,标度可以为零或者正数。另外,

NUMERIC(precision )

选择了标度为 0 。不带任何精度与标度的声明

NUMERIC

则创建一个可以存储一个直到实现精度上限的任意精度和标度的数值,一个这样类型的字段将不会把输入数值转化成任何特定的标度,而带有标度声明的 numeric 字段将把输入值转化为该标度。SQL 标准要求缺省的标度是 0( 也就是转化成整数精度) 。我们觉得这样做有点没用。如果你关心移植性,那你最好总是明确声明精度和标度。

如果一个要存储的数值的标度比字段声明的标度高,那么系统将尝试圆整( 四舍五入) 该数值到指定的小数位。然后,如果小数点左边的数据位数超过了声明的精度减去声明的标度,那么将抛出一个错误。

numeric 类型的数据值在物理上是不带任何前导或者后缀零的形式存储的。因此,字段上声明的精度和标度都是最大值,而不是固定分配的。在这个方面,numeric 类型更类似于 varchar(n ) 而不是 char(n ) 。实际存储是每四个十进制位两个字节,然后在整个数据上加上八个字节的额外开销。

除了普通的数字值之外,numeric 类型允许用特殊值 NaN 表示" 不是一个数字" 。任何在 NaN 上面的操作都生成另外一个 NaN 。如果在 SQL 命令里把这些值当作一个常量写,你必须在其周围放上单引号,比如 UPDATE table SET x = 'NaN' 。在输入时,字符串 NaN 是大小写无关的。

类型 decimal numeric 是等效的。两种类型都是 SQL 标准。

8-4. 字符类型

名字

描述

character varying(n ), varchar(n )

变长,有长度限制

character(n ), char(n )

定长,不足补空白

text

变长,无长度限制

SQL 定义了两种基本的字符类型:character varying(n ) character(n ) ,这里的 n 是一个正整数。两种类型都可以存储最多 n 个字符的字符串。试图存储更长的字符串到这些类型的字段里会产生一个错误,除非超出长度的字符都是空白,这种情况下该字符串将被截断为最大长度。这个看上去有点怪异的例外是 SQL 标准要求的。如果要存储的字符串比声明的长度短,类型为 character 的数值将会用空白填满;而类型为 character varying 的数值将只是存储短些的字符串。

如果我们明确地把一个数值转换成 character varying(n ) character(n ) ,那么超长的数值将被截断成 n 个字符,且不会抛出错误。这也是 SQL 标准的要求。

varchar(n ) char(n ) 分别是 character varying(n ) character(n ) 的别名,没有声明长度的 character 等于 character(1) ;如果不带长度说明词使用 character varying ,那么该类型接受任何长度的字符串。后者是 PostgreSQL 的扩展。

另外,PostgreSQL 提供 text 类型,它可以存储任何长度的字符串。尽管类型 text 不是 SQL 标准,但是许多其它 SQL 数据库系统也有它。

character 类型的数值物理上都用空白填充到指定的长度 n 并且以这种方式存储和显示。不过,填充的空白在是无语意的。在比较两个 character 值的时候,填充的空白都不会被关注,在转换成其它字符串类型的时候,character 值里面的空白会被删除。请注意,在 character varying text 数值里,结尾的空白是有语意 的。

这些类型的存储需求是 4 字节加上实际的字符串,如果是 character 的话再加上填充的字节。长的字符串将会自动被系统压缩,因此在磁盘上的物理需求可能会更少些。长的数值也会存储在后台表里面,这样它们就不会干扰对短字段值的快速访问。不管怎样,允许存储的最长字符串大概是 1GB 。允许在数据类型声明中出现的 n 的最大值比这还小。修改这个行为没有什么意义,因为在多字节编码下字符和字节的数目可能差别很大。如果你想存储没有特定上限的长字符串,那么使用 text 或没有长度声明词的 character varying ,而不要选择一个任意长度限制。

【提示】 这三种类型之间没有性能差别,只不过是在使用 character 的时候增加了存储尺寸。虽然在某些其它的数据库系统里,character(n ) 有一定的性能优势,但在 PostgreSQL 里没有。在大多数情况下,应该使用 text character varying

8-9. 日期/ 时间类型

名字

存储空间

描述

最低值

最高值

分辨率

timestamp [ (p ) ] [ without time zone ]

8 字节

日期和时间

4713 BC

5874897 AD

1 毫秒 / 14

timestamp [ (p ) ] with time zone

8 字节

日期和时间,带时区

4713 BC

5874897 AD

1 毫秒 / 14

interval [ (p ) ]

12 字节

时间间隔

-178000000

178000000

1 毫秒 / 14

date

4 字节

只用于日期

4713 BC

5874897 AD

1

time [ (p ) ] [ without time zone ]

8 字节

只用于一日内时间

00:00:00

24:00:00

1 毫秒 / 14

time [ (p ) ] with time zone

12 字节

只用于一日内时间,带时区

00:00:00+1459

24:00:00-1459

1 毫秒 / 14

 

 

分享到:
评论

相关推荐

    PostgreSQL学习笔记

    **PostgreSQL学习笔记** PostgreSQL,简称PG,是一款开源的对象关系型数据库管理系统,以其强大的功能、高度的稳定性以及丰富的数据类型而备受开发者喜爱。作为一款成熟的数据库系统,它支持SQL标准,并提供了许多...

    Postgresql学习笔记

    【PostgreSQL学习笔记详解】 PostgreSQL,简称PG,是一款开源的关系型数据库管理系统,以其高度的稳定性和强大的功能受到全球开发者的广泛青睐。本学习笔记旨在为初学者提供一个全面、易懂的PG入门指南,帮助“菜鸟...

    PostgreSQL12.2中文手册.chm.7z

    3. **数据类型与操作**:PostgreSQL提供多种数据类型,如数值、字符串、日期时间、布尔值以及自定义类型。手册会解释每种数据类型的用法,并展示如何进行插入、更新、删除等基本操作。 4. **索引与查询优化**:索引...

    PostgreSQL 数据库优化 培训视频【18集】

    - 数据类型、表设计等基础知识。 2. **查询优化技术**: - SQL查询语句分析与优化技巧。 - 使用EXPLAIN工具进行执行计划分析。 - 索引类型及其选择策略。 3. **性能监控与调优**: - 如何利用pg_stat_*视图...

    SQL学习笔记(pdf)

    - DDL语句:通过CREATE DATABASE和CREATE TABLE命令创建新的数据库和表,定义字段、数据类型、约束条件等。 3. **数据插入、查询与更新** - INSERT INTO:向表中插入新记录。 - SELECT语句:查询数据,包括基本...

    JDBC.rar_jdbc PostgreSQL_oracle_postgresql

    PostgreSQL支持多种数据类型,如JSON、XML、数组、HSTORE等,还提供了事务处理、复杂的查询、触发器、视图等特性。连接到PostgreSQL数据库,我们需要一个支持PostgreSQL的JDBC驱动,如`org.postgresql.Driver`,然后...

    MySQL入门很简单-学习笔记_20110913.pdf

    - **修改字段的数据类型**:`ALTER TABLE table_name MODIFY column_name new_data_type;` - **字段及数据类型的增删改移**:使用`ALTER TABLE`命令进行相应的操作。 - **更改表的存储引擎**:`ALTER TABLE table...

    Sqoop数据采集工具简介、安装、使用学习笔记(配合Hive和Hbase)

    - 在使用 Sqoop 进行数据导入或导出时,需要确保源端和目标端的数据格式一致,以避免数据类型不匹配导致的问题。 - 当使用 Sqoop 与 Hive 或 HBase 配合时,需要特别注意表结构的一致性,包括列名、数据类型等。 - ...

    SQL 数据库语言学习笔记

    本篇“SQL数据库语言学习笔记”将深入探讨SQL的基本概念、语法和常用操作,帮助你掌握这个强大的工具。 一、SQL简介 SQL起源于1970年代,由IBM的研究员开发,其设计目标是为了解决日益复杂的数据查询和管理问题。...

    GIS考试学习笔记.zip

    1. 数据类型:GIS处理的数据主要分为矢量数据和栅格数据。矢量数据由点、线、面等几何对象构成,代表具体的位置和形状;栅格数据则由一系列网格单元组成,每个单元具有特定的属性值,适用于连续性空间现象如地形、...

    python全套学习笔记

    "Python全套学习笔记"涵盖了从入门到进阶的所有关键知识点,是学习Python编程的理想资源。以下是一些主要的学习要点: 1. **基础语法**:Python的基础始于变量、数据类型(如整数、浮点数、字符串、布尔值)以及...

    Hive学习笔记

    - Hive 支持多种数据类型,包括基本类型如整型、浮点型、字符串,以及复杂类型如数组、结构体、映射等。 5. **Hive 建表**: - 建表时需要指定表名、列名、列数据类型和分区信息。例如:`CREATE TABLE IF NOT ...

    学习笔记——sql.zip

    首先,SQL的基础知识包括数据类型,如整型(INT)、浮点型(FLOAT)、字符串(VARCHAR)、日期时间(DATE、TIMESTAMP)等。理解这些类型对于创建和操作数据库至关重要。接着是SQL的数据操作,包括SELECT用于查询数据...

    php个人学习笔记

    - 数据类型:包括字符串、整型、浮点型、布尔型、数组、对象、NULL和资源。 - 输出:`echo` 和 `print` 用于输出内容,`echo` 更快,适合连续输出多个值。 - 注释:单行注释使用 `//`,多行注释使用 `/* ... */`...

    MySQL入门很简单-学习笔记

    ### MySQL入门很简单—学习笔记知识点总结 #### 一、数据库概述 **1.1 数据存储方式** - **文件系统**:传统的数据存储方式,通过文件和文件夹组织数据。 - **数据库系统**:通过数据库管理系统(DBMS)进行数据...

    mybatis_maven学习笔记

    PostgreSQL是一个开源的对象关系型数据库,支持复杂的数据类型和高级查询功能。在MyBatis中,我们可以配置连接池(如C3P0或Druid)和数据源,实现与PostgreSQL的连接。 9. **Maven插件的应用** Maven插件如maven-...

    MySQL学习笔记 ADY

    以上是对文件中提及的MySQL学习笔记知识点的详细解释,这些知识点覆盖了MySQL的安装配置、基本概念、数据类型、表操作、索引、视图、触发器、查询、数据操作、运算符、函数以及存储过程和函数等方面,适合初学者学习...

    Mysql学习笔记.pdf

    本学习笔记将围绕MySQL的基础知识、体系架构、性能优化等方面进行深入探讨。 首先,MySQL的学习需要掌握基本的SQL语法,如数据查询、插入、更新和删除操作。推荐的书籍包括《MySQL必知必会》和《MySQL深入浅出》,...

Global site tag (gtag.js) - Google Analytics