作成: 更新:

【MySQL】日付のNULL許容、ダメ。ゼッタイ。

この記事は最終更新日から11か月以上が経過しています。
このエントリーは約1分で読めます。

日付をユニークキーにしたところ、なぜかユニークじゃないレコードが出てきた

詳細

以下のテーブルがあり
nameだけじゃユニークにならなそうだから
created_byをつけてユニークにしようと思ったら
created_byつける前のレコードもユニークになってしまった

name age created_by
sato 20 20000101
sato 20 20000201
sato 20 null
sato 20 null

mysqlはnullはユニークとみなすらしい
(お恥ずかしい話ですが初めて知りました、ググるとめっちゃ情報出てきたし結構一般的らしい)

結論

  • 日付はユニークキーとしてつかわない
  • 日付は複合キーにも含めない
  • 別に日付だけじゃないけどね、全部だね、null許容のメリットあんのかな。。。
    • まあアンチパターン(Fear of the Unknown)だしね。。。ないよね。。。
  • やるとしたらnullを許容しない
    • notnull制約かける+既存レコードにもきを配る(マイグレーションしましょう)

参考