無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 10 データタイプ :: 10.3 日付と時刻タイプ :: 10.3.4 2000年問題とデータタイプ
« 10.3.3 YEAR タイプ

10.4 文字列タイプ »
Section Navigation      [Toggle]
  • 10.3 日付と時刻タイプ
  • 10.3.1 DATETIME、DATE、そして TIMESTAMP タイプ
  • 10.3.2 TIME タイプ
  • 10.3.3 YEAR タイプ
  • 10.3.4 2000年問題とデータタイプ

10.3.4. 2000年問題とデータタイプ

MySQLサーバ自体は2000年(Y2K)コンプライアンスに対して何も問題はありません。

  • MySQLサーバは、TIMESTAMP 値に対して、日付を 2037 年まで扱う Unix時間関数を利用しています。DATE と DATETIME 値には、9999 年までの日付が許容されています。

  • 全てのMySQLの日付機能は一つのソースファイル、sql/time.cc で実行されており、2000年問題に対して安全にプログラムされています。

  • MySQLでは、YEAR データタイプは 0 年と 1901 年から 2155 年を1バイトで格納する事ができ、2桁か4桁でそれらを表示します。全ての2桁の年は 1970 年から 2069 年の範囲だと判断されます。ですので、YEAR カラムに 01 を格納すると、MySQLサーバはそれを 2001 年として扱います。

MySQLサーバ自体がY2Kに対して安全だとしても、そうでないアプリケーションと共に利用すると問題が起きる可能性があります。例えば、多くの古いアプリケーションは、4桁の値よりも、曖昧である2桁の値を利用して年を格納したりコントロールしたりします。この問題は、「欠けている」値を表す為に 00 や 99 などの値を利用するアプリケーションによって作られる可能性があります。残念ながら、異なるアプリケーションは異なるプログラマによって書かれており、それぞれが、異なる仕様や日付管理の関数を利用しているので、これらの問題を修正するのは難しいです。

それ故、MySQLサーバにY2Kの問題が無いとしても、曖昧でない値を入力する事は、アプリケーションの義務です。.2桁の年を含む日付の値は、世紀が不明な為曖昧です。MySQLは内部的に4桁を利用して年を格納するので、そのような値は4桁の形に修正されなければいけません。

DATETIME、DATE、TIMESTAMP、そして YEAR タイプに対して、MySQLは次のルールを利用して曖昧な年の値の日付を修正します。

  • 00-69 の範囲の年の値は 2000-2069 に変換されます。

  • 70-99 の範囲の年の値は 1970-1999 に変換されます。

これらのルールは、データ値が何を表すかを妥当に推測する単なる経験則である事を覚えておいて下さい。もしMySQLが利用するルールが正しい値を導かなければ、4桁の年の値を含む、曖昧ではない入力が必要になります。

ORDER BY は、2桁の年を持つ YEAR 値を正しく分類します。

MIN() や MAX() 等のようないくつかの関数は、YEAR を数字に変換します。これは、これらの関数を利用すると、2桁の年の値は正確に機能しないという意味になります。この場合の修正は、TIMESTAMP や YEAR を4桁の年のフォーマットに変換するという事になります。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.