アフィリエイト広告を利用しています

2019年03月24日

日付が0000-00-0000

Mysqlのデータベースを使用していて

Dateタイプのフィールドの値が 0000-00-0000 になっているのに気付いた。

現象が発生しているのは必須入力ではない日付欄。

Webで検索してみると

null がこのような形式で表示されるらしい。

モード(sql mode)を切り替えると0000-00-00となるのを防げるようで、

そのためのコマンドがいくつか記載してあった。

早速、そのコマンドを実行した。

試行錯誤


SET GLOBAL sql_mode = 'modes';
    ↓

 #1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation


rootユーザではないので、仕方ない。しかし、こちらも駄目。

SET SESSION sql_mode = 'modes';
    ↓

 #1231 - Variable 'sql_mode' can't be set to the value of 'modes'


次のコマンドは実行できた。

SET SESSION sql_mode = 'STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_DATE';

実行結果を確認すると、

SHOW VARIABLES LIKE "%sql_mode%";

sql_modeの値は空のままだった。設定は行われていない。

etc/my.cnfファイルにsql_modeの設定を書き込んでも良いらしいが

レンタルサーバなので権限がない。

最後の一手


万策尽きてしまったが、ここで閃いた。

開発中のシステムは長くても3か月しか使わない。

2019年以外の日付は入力されない。

月と日を別々の整数項目にすれば、0000-00-00 は発生しない。

月と日をプルダウンメニューで選択するようにすれば

入力の手間が増えることもない。

本質的な解決ではないが、回避策としてはこれで十分。

【このカテゴリーの最新記事】

posted by db-engineer at 00:00 | Comment(0) | Mysql

この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

検索
最新記事
カテゴリーアーカイブ
プロフィール
db-engineerさんの画像
db-engineer
プロフィール
タグクラウド