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 は発生しない。
月と日をプルダウンメニューで選択するようにすれば
入力の手間が増えることもない。
本質的な解決ではないが、回避策としてはこれで十分。
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image