• ベストアンサー

日付や日時を格納する場合の型はどうしていますか?

WEBアプリケーションで データベース(MySQL)を使うのですが、 日付や日時を格納する場合の型は varchar(10)、date、datetime のどれにしていますか? 文字型と日付型か迷っているので、 メリット、デメリットがあれば知りたいです。

  • php4
  • お礼率42% (373/888)
  • MySQL
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

date や time にします。 Mysqlは結構豊富に関数がそろっているので問題が起こることはないでしょう。 日付型のデメリットは特にないですね。

参考URL:
http://dev.mysql.com/doc/mysql/ja/date-and-time-functions.html
php4
質問者

お礼

同じ考え方の方がいてホッとしました。 bigintとか使っている人もいるみたいで優柔不断な 私は大変困っておりました。 確実に日時のデータという保証がされる点で、基本的には 日付や時間を使う方が良さそうですね。 ありがとうございます。

その他の回答 (2)

  • hogefuga
  • ベストアンサー率75% (6/8)
回答No.3

私はJavaでMySQLを使っているのですが人間が直接DBをいじらない場合はBIGINTにしています(現在時刻はSystem.currentTimeMillis()で取得しています)。 利点はプログラムでの時間の計算が簡単だということと、ほかのDBへの移行が簡単だということです。 欠点は人間がDBに格納された値を見た場合に時間がわからないということですかね。

  • k-roh
  • ベストアンサー率36% (14/38)
回答No.2

日付や日時の使い方次第だと思います。 たとえば、処理のログをとる場合は、ありえない日時が入ることがないので date,timeでいいと思います。 しかし、注文伝票の配達指定日のように「データーがあったりなかったりするばあい」へたにdateにするよりはvarchar にして未入力状態に対応できるようにした方がいいです。

関連するQ&A

  • 日時を保存するカラムの型について

    日時を保存する型としてベストな型はどれなのでしょうか? MySQL5.1にて日付を保存するカラムをdatetime型で設計をしていたのですがタイムゾーンを考慮したい場合にはどうするのがベストでしょうか? タイムゾーンを別カラムで持つ場合、単位を時間で持つと計算が手間のように感じ、それならunixtimeをint型で持って、時差情報も秒で持てば計算がらく、と思ったのですが、、、 こうやってますよ、という事例などありましたら教えてください

  • MySQLで日時データをdatetime型に変換

    現在、MySQLにて日時情報を文字列として格納しているのですが、 日時の計算を行うために、datetime型に変換した上で 格納しなおしたいと考えています。 どのようにすれば良いでしょうか? よろしくお願い致します。

  • 「000-000」のような値を扱いたい時の型。

    例えば整数「123」などでしたら、int型を使って値を格納すればいいと思うのですが、例えば「123-999」などを扱いたい場合は、どんな型を使うべきでしょうか?やはり文字列型になってしまうでしょうか? 数字以外には「-(あるいは_)」しか使いません。 それらの値をデータベース(MySQL)に入れる予定です。 それらの値はデータベースのID(キー)に使います。 よろしくお願いします。

    • ベストアンサー
    • Java
  • mysqlで日付が比較できない・・・

    はじめまして 皆様の知恵を貸してください mysqlでの質問なのですが、 簡潔にいうと日付が比較できません。 どういうことをしたいのかというとsqlからwhere文で今の日付より大きいもデータを抽出するということです データベースの構造は id int型 endtime datetime型 で構成されています endtimeには既にいくつかのdatetime型の値が入っています 例えば 2012-12-14 09:18:00 のように入っています でGETDATE()関数を使って今現在の時刻より未来のものだけ抽出するために convert関数を使って一度varchar型に変換することで比較しようとしました 色々インターネットで調べた結果次のような文なのではないかと考えました select id,endtime from [データベース名] where CONVERT(VARCHAR,endtime,121)>=CONVERT(VARCHAR,getdate(),121); しかし実行ができません 比較する方法を教えて欲しいです

    • ベストアンサー
    • MySQL
  • 日時を期間指定で出力するには?

    お世話になります。 データベースに、日付VARCHAR(100)というカラムがあり、そこに、"2005/02/01 20:00"のようなデータを登録していっています。これを、指定期間で検索をかけて出力することは可能なのでしょうか。 SELECT * FROM table WHERE BETWEEN '2005/01/01 00:00' and '2005/02/10 00:00'; とします。そのとき、2005/02/01 20:00がヒットできればいいのですが、VARCHAR型で果たしてできるのでしょうか。(正直やってみたのですが、うまくいきません。やはりだめ??) datetime型にすると、2005/02/10 20:00とデータベースにいれると、2005-02-10 20:00:00 となるので、できればVARCHAR型でやりたいのですが。。。 何か方法はないでしょうか。よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • mysqlに格納されている日付のデータから重複なしで年を取得する方法

    mysqlに格納されている日付のデータから重複なしで年を取得する方法 を検討しているのですが、どなたかご教授していただければと 思います。 下記のデータベースの場合 2007 2008 2009 2011 といった値を抽出したいと考えております。 どうぞよろしくお願いいたします。 mysql> select*LOGS; +-----+---------------------+------+ | UPDATE_DATE | ITEM_NO | +---------------------+------+ | 2007-07-05 14:35:35 | 1 | | 2007-07-05 14:42:20 | 5 | | 2008-07-06 00:01:20 | 12 | | 2009-07-06 13:38:16 | 13 | | 2009-07-06 13:47:45 | 13 | | 2011-07-06 13:54:10 | 2 | +---------------------+------+

    • ベストアンサー
    • MySQL
  • 日付のデータ型について

    データ型の違う日付フィールドを比較した場合同じ日付でもマッチングしないのでしょうか? SQL 2008   smalldatetime → 1990/1/1 起点   datetime → 1753/1/1 起点   date → 1/1/1起点 ACCESS 2003   date → 100/1/1 起点 それぞれ日付を整数に変換して保持していると考えています。 ACCESSのdate型の項目に日付を代入してSQLを検索すると同じ日付なのに   SQLのフィールドの型がdatetime型だとマッチするのですが、   date型だとマッチしないんです、どうしてでしょうか?

  • 検索条件の日付の型

    お力を貸してください。 データベースから現在年月日のものだけ抽出したいのですが、 日付の型が合わないからなのか、抽出できません。 dt_fromカラムには表示開始日時 dt_toカラムには表示終了日時が入ってます。 $from = date('Y-m-d 00:00:00'); $to = date('Y-m-d 23:59:59'); $sql = "SELECT * FROM data WHERE dt_from = $from AND dt_to = $to "; どこかおかしい点があればご指摘ください。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • DB登録に関する日付の認識

    はじめまして、こんばんは。分からないことがあり質問させていただきます。 現在、PHPにてMySQLへアクセスログを登録するものを作成しており、同じ日付に複数訪れた人は、最終日時。はじめて訪れた人はその日時を登録したいのですが、登録(または更新)する際、データベースに設定のdateカラム(datetime)を参照したとき、同じ日付をどう判別するのか?が分かりません。 以上のことから、これまで年月日のみをdateカラムに登録していたのですが、時間も登録したく考え、改め見直しているのですが、時間までをも登録した場合の日付の判別が分からないのです。 お恥ずかしいとは思うものの、現在の登録スクリプトは、 $y = date("Y"); $m = date("m"); $d = date("d"); $date = $y.$m.$d; $sql = "insert................ それを、 $date = date("Y-m-d H:i:s"); で登録したいと考えております。 お忙しい中恐縮ですが、ご指導いただければ幸いです。

    • ベストアンサー
    • PHP
  • MySQL「 INT」「 DATETIME」違い

    MySQLの「 INT」型と「 DATETIME」型の違いを教えてください。 ・「 DATETIME」型とは、単に日付形式を担保してくれる型に過ぎないのでしょうか? ・日付形式(フォーマット)以外を挿入すると、「0000」になってしまうということでしょうか? ■「 DATETIME」メリット ・データ内容が見た目で分かる以外、何があるのでしょうか? ■「 INT」メリット ・早い?

    • ベストアンサー
    • MySQL