#はじめに
業務で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
最後に
ここで取り上げたデータ型はほんの一部なので、
気になる方はぜひ調べてみてもらえればと思います!
拙い文章を最後までお読みいただき、ありがとうございました!!