人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLでテーブルの更新日時のカラムをTIMESTAMP型からINT型(unixtime)に変更しようかと思っています。思い付いたメリットなどを下記に列挙しましたが、それ以外に何かありましたらアドバイスをお願いします。

変更するメリットとして、

・プログラム内で処理しやすい
・TIMESTAMPが「2011-05-28 12:21:47」だと、INTでは「1306552907」となりコンパクト。単純に考えてPHPなどのアプリケーションから問合わせ時の通信トラフィックを抑えられそう

デメリットとして、

・TIMESTAMPのCURRENT_TIMESTAMPが使えないので、更新時にプログラム側で対処の必要
・UNIXTIMEだと日時が直感的に分かりにくい

などなど。

ちなみに、以下のサイトは参考にしました。
http://blog.fukaoi.org/2009/03/19/mysql_datetime
http://d.hatena.ne.jp/ono_matope/20100430

よろしくお願いします。

●質問者: xxmasaxx
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:12 28 MySQL PHP アドバイス
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● a-kuma3
●27ポイント

TIMESTAMP で便利だとしたら、INSERT するときに値を指定しないと、現在時刻を設定してくれるところでしょうか。

ログを表すようなテーブルだと、処理が簡単になる可能性があります。


整数で扱う場合に便利なのは、「時刻が指定されて無い」という表現ができることです。

レコードを作るときには時刻が決まらなくて、後で決まる、というような場合には、

「時刻が指定されていない」というのを -1 を入れておく、というふうに作っておく、とか。


時刻に相当するデータを整数で保存する場合には、以下のパターンもあります。


前者は、テーブルをダンプした場合でも、時刻の見当がつく、というメリットがあります。

そのかわり、時刻に見えないデータも簡単に保存できてしまう、というデメリットがあります。


後者は、秒よりも細かい精度が欲しい場合ですね。

それ以外は、time_t を格納するのと、同じです。

◎質問者からの返答

遅れましたが回答有り難うございます。

整数だと時刻以外を格納できるのも有りですね。参考にさせて頂きます。


2 ● Banias
●27ポイント

本論に入る前に、ご質問で提示されたメリット/デメリットについて検証しておきます。


【メリット】

・プログラム内で処理しやすい

これはプログラミング言語の性質にもよりますが、たいていの場合、TIMESTAMP型で取得したデータをintにキャスティングしてしまえば、以降はint型として処理できるので、たいしたメリットではないと考えます。

【メリット】

・TIMESTAMPが「2011-05-28 12:21:47」だと、INTでは「1306552907」となりコンパクト。単純に考えてPHPなどのアプリケーションから問合わせ時の通信トラフィックを抑えられそう

MySQL内部ではINTEGERもTIMESTAMPも32ビット長で格納していますので、トラフィックは変わりありません。


そのうえで、追加として考えられるメリット/デメリットを掲げます。

メリット デメリット
TIMESTAMP MySQL内でカレンダー計算が可能 1970?2037年の範囲でしか使えない
INT 他のデータ型や他のデータベースへの移行が楽 プログラム側にカレンダー計算ルーチンが必要

余談になりますが、私は、金融業務のような長期債務計算(35年ローンだと2037年を超えるため)が必要な場合には、LONGINTまたはDATETIMEを使い、西暦0年(架空の年号)からの累計秒数を計算しています。

また、国際取引が必要な場合には、RFC3339形式の日時情報をVARCHAR型で保持します。ローカル時間や季節時間を盛り込むことができるので、時差計算をするのに都合が良いのです。

さらに、考古学や天文学など、さらに幅広い年号を扱う場合は、ユリウス通日をDOUBLE型で実装しています。世界の旧暦を扱う計算式も用意されており、便利です。

◎質問者からの返答

確かにMySQL内部ではINTもTIMESTAMPも同じサイズですが、外部からSQLで問い合わせた際も同じ、とみてよいのでしょうか。

時差は想定してませんでしたが、VARCHARで保存する発想は面白いです。

遅れましたが回答どうも有り難うございました。


3 ● chuken_kenkou
●26ポイント

MySQLのTIMESTAMP型は、MySQLにより自動更新するという独自機能を持つデータ型です。

ユーザ側で日時を保存するには、DATETIME型を使う必要があります。

SQL中で、日付演算を行うなら、DATETIME型、TIMESTAMP型を使わないと、いろいろ不便があるでしょう。

◎質問者からの返答

日付の計算は考えてませんでした。アプリケーション側で実装するにはちょっと面倒ですね。

遅れましたが回答どうも有り難うございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ