Project

General

Profile

Bug(バグ) #135

mysql でメンバープロフィールの「誕生日」が「-0001-11-30」と表示される

Added by Mari Yamashita over 10 years ago. Updated over 10 years ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Target version:
Start date:
2009-10-29
Due date:
% Done:

100%

3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

Description

mysqlの問題かもしれませんが、メンバープロフィールの「誕生日」を保存すると
value_datetimeが「0000-00-00 00:00:00」になるので
MemberProfileの
@if ($this->_get('value_datetime')) {
$obj = new DateTime($this->_get('value_datetime'));
return $obj->format('Y-m-d');
}@
にマッチして誕生日が「-0001-11-30」になります。

関連チケット#87


Related issues

Related to OpenPNE 3 - Enhancement(機能追加・改善) #87: Reconsider of handling date type configurations and profiles (日付型の設定とプロフィールの扱いについて再考する) Fixed(完了) 2009-10-08

Associated revisions

Revision 31402597 (diff)
Added by Kousuke Ebihara over 10 years ago

fixed that the default value of datetime column is noncommittal (fixes #135, thanks to Mari Yamashita's early reporting)

But I think that these changes are very bad know-how. If you want to know why, please read my comment in source code. Most of large comments are used for hiding dirty code, as now :/

History

#1 Updated by Kousuke Ebihara over 10 years ago

  • Target version set to OpenPNE 3.1.4

#2 Updated by Kousuke Ebihara over 10 years ago

  • Status changed from New(新規) to Accepted(着手)
  • Assignee set to Kousuke Ebihara

#3 Updated by Kousuke Ebihara over 10 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)

314025979601fa8aa3e0670e22b91b9dd996a604 で修正をおこないました。

mari yamashita さん、早期にご報告いただきありがとうございます。

クリティカルな箇所の対応になってしまいましたので、以下、本対応について説明します(一部ソースコード内のコメントの和訳になります)。

0001-01-01 00:00:00 という値の opDoctrineRecord::UNDEFINED_DATETIME という定数を用意し、この値を用いることでゲッターとセッターが適切に空と見なされる値を扱えるように修正しました。

本来 NULL を使うべきなのですが、少なくとも日付型に限って言えば、 NULL の扱いは RDBMS 間で曖昧なものとなります。

MySQL はこの用途に 0000-00-00 00:00:00 を用意していますが、たとえばこれは PostgreSQL では扱えません。

PostgreSQL の振る舞いは ISO 8601 に似通ったものになっており、これは 0000-01-01 を許容します(これは紀元前 1 年を意味します)。

標準 SQL においては 0001-01-01 00:00:00 が使えるようです。

OpenPNE としては今後複数種類の RDBMS をサポートすることになります。すなわち、多くの RDBMS に取って都合のよい形式を選択するべきと判断し、ここでは 0001-01-01 00:00:00 を未定義の日付として扱うように変更をおこないました。

なお、今回、 hnw さんのエントリを参考にさせていただきました。ありがとうございます。 http://openlab.dino.co.jp/2007/11/10/170436147.html

#4 Updated by Kousuke Ebihara over 10 years ago

  • Status changed from Pending Review(レビュー待ち) to Fixed(完了)
  • % Done changed from 0 to 100

Also available in: Atom PDF