6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

株式会社デジタルクエストAdvent Calendar 2021

Day 18

DBデータ型について(PostgreSQL編)

Last updated at Posted at 2021-12-18

#はじめに

業務でDB設計について考える機会があったので、その時調べたことを備忘録としてまとめてみます!
(PostgreSQLがメインで、ちょこちょこMySQLとの比較も出てきます)

「なんだかデータ型の名前は聞いたことあるけど、ちゃんと理解できてないなぁ…」
っていう、私のような方向けのあくまで**初心者レベル**ですので

「ここ違うよ」「詳しくはこうだよ!」、などありましたら、
何でもアドバイスいただけると嬉しいです、、!

1. まずは整数たち

データ型 容量 説明
smallint 2B 狭範囲の整数。
→容量を抑えたい時に使用。
integer 4B 典型的に使用する整数。
bigint 8B 広範囲の整数。
→integerでは足りない場合に使用。
DBでint(2)などと表示されていたけど、
まさかsmallintのことを指しているとは、、無知。

▼ちなみにMySQLはこちら

上記に加えて、下記データ型もありました。細かい!
(「TINYINT」の名前は聞いたことありましたが、PostgreSQLには存在しないんですね。)

データ型 容量 説明
TINYINT 1B smallintよりさらに狭範囲の整数。
MEDIUMINT 3B smallintとintegerの間。

2. 小数含む数字

データ型 容量 説明
numeric 可変長 ユーザー指定精度。
→正確な計算を行えるため、通貨金額など
正確性が求められる場合に使用。
ただし、浮動小数点データに比べて処理が遅くなる。
real 4B 浮動小数点データ型。
double precision 8B 浮動小数点データ型。

▼ちなみにMySQLはこちら

PostgreSQLの「real」「double precision」ではなく、
浮動小数点データ型は下記が定義されていました。

データ型 容量 説明
FLOAT 4B 浮動小数点データ型。
DOUBLE 8B 浮動小数点データ型。

3. 日付(+時刻)

データ型 容量 説明
timestamp with timezone 8B 絶対時刻(ローカル時間)
→基本的にはアプリで処理しやすいこちらを
使用することが多いそう。
通称timestampz
timestamp
(without timezone)
8B 概念時刻(グリニッジ時間)

▼ちなみにMySQLはこちら

データ型 容量 説明
datetime 8B サポート範囲は'1000-01-01 00:00:00' から
'9999-12-31 23:59:59' ※月や日付に00を許容する
timestamp 8B サポート範囲は'1970-01-01 00:00:01' UTC から
'2038-01-19 03:14:07' UTC

4. 文字

データ型 容量 説明
char(n) 1GB 空白で埋められた固定長。
n文字の固定長文字列型。
余白はスペースで埋められる
varchar(n) 1GB 上限付き可変長。n文字の可変長文字。
文字数を指定できるからデータ量の見積もり(節約)が可能
text 1GB 制限なし可変長。長さ制限がない文字列。

▼ちなみにMySQLはこちら

MySQLでは上記と同名のデータ型でも容量が異なり、
かつ、PostgreSQLにはない「TINYTEXT」「MEDIUMTEXT」「LONGTEXT」という型もあるみたいです、、!

<参考>

・PostgreSQL 9.3.2文書
https://www.postgresql.jp/document/9.3/html/index.html

・MySQL
https://dev.mysql.com/

・MySQLとPostgresのデータ型対応表
https://qiita.com/suin/items/85b1e3eebb99777b171d

・timestamp with time zone型はタイムゾーン情報を持っていない
https://qiita.com/yuba/items/7852a29d63d6279c6f6e

・MySQLのDATETIME型とTIMESTAMP型の違いを検証してみた
https://qiita.com/ykawakami/items/2449a24e3b82ff0cbab6

・MySQLの数値型(int、tinyint、bigint、decimal、number、float)の解説
https://blog.s-giken.net/367.html

最後に

ここで取り上げたデータ型はほんの一部なので、
気になる方はぜひ調べてみてもらえればと思います!

拙い文章を最後までお読みいただき、ありがとうございました!!

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?