Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

個人的DBのデータ型ややこしいとこまとめ

More than 1 year has passed since last update.

経緯

現在個人開発しているアプリがあり、データ構造の決定中なのですが、データ型の決定で迷った部分がいくつかあったので備忘録的にまとめておきます。
本当にくそ雑まとめですが、ご容赦ください。。

Datetime型とTimestamp型

参考にさせていただきました
https://qiita.com/ryokkkke/items/a007d5edd4d8e7484c56

イメージ的には

datetimeは時間形式の情報を格納する型
timestampは現実でのある一点を表す情報を格納する型
という感じでしょうか。

ryokkkkeさんの記事の通りですが、Datetimeは 'YYYY-MM-DD HH:MM:SS' 形式であれば例えば'9999-12-31 23:59:59'も格納が可能です。
サポート範囲としてはサポートしている範囲は '1000-01-01 00:00:00' から '9999-12-31 23:59:59' となります。

対して、Timestamp には、'1970-01-01 00:00:01' UTC から '2038-01-19 03:14:07' UTCをサポート範囲としています。

また、これまた引用で申し訳ないのですが、

datetime
INSERT時
与えられた日付時刻リテラルを、time_zoneに関係なく文字列としてそのまま保存する。
SELECT時
保存した文字列をそのまま渡す。

timestamp
INSERT時
与えられた日付時刻リテラルを、time_zoneで指定されたタイムゾーンでの時刻であると解釈し、それをUTC時刻に変更して保存する。
SELECT時
保存したUTC時刻をtime_zoneで指定されたタイムゾーンでの表記に変更して渡す。

となっています。

Char型とVerchar型

これまた先人様の記事をお借りします。。
https://qiita.com/yebisu_heaven/items/c589430bdb00c6ab4922

雑にまとめると
Char型は長さの調節がされない。
すなわちCHAR(10)とすると10バイトに満たない場合も常に10バイトが確保されて格納される。

Verchar型は長さの調節がされる。
すなわちVerchar(10)とすると10バイトに満たない場合にはそれに合わせた領域が確保される。

といった感じらしいですね。
詳しくはyebisu_heavenさんの記事を読んでみたほうが理解が深まると思われます。。

終わりに

データ型の区別くらいしっかりつくようになっておきたいものです。。

sanpo_shiho
京都で大学生してます。
https://sanposhiho.com/
fukuokaex
エンジニア/企業向けにElixirプロダクト開発・SI案件開発を支援する福岡のコミュニティ
https://fukuokaex.fun/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away