38505


**環境**  
・MySQL5.7

**sql_mode**  
・STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO

* * *

**Q1.「STRICT_TRANS_TABLES」が有効な状態で、'0000-00-00'と'2017-10-00'を使用可にするためには？**  
・「NO_ZERO_IN_DATE」「NO_ZERO」だけを無効にすれば良い？  
・どうやって？

* * *

**Q2.MySQL5.7では、NO_ZERO_DATEは関係ない？**  
・[公式ページ](https://dev.mysql.com/doc/refman/5.6/ja/sql-
mode.html)で下記のように記載されていますが、どういう意味ですか？

> MySQL 5.7 では、このモードは何も行いません。その代わり、この効果は厳密モードの効果に含められています。


CC BY-SA 3.0
2017-10-07T03:56:18.050
38502
2017-10-07T04:35:02.207
7886
question
mysql
STRICT_TRANS_TABLESで、'0000-00-00'と'2017-10-00'を使用可にしたい


参照されたページは5.6の時点で書かれた予告でしかなく、実際の動作は5.7のドキュメントを参照すべきです。  
[5.1.8 Server SQL Modes、SQL Mode Changes in MySQL
5.7](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-
changes)にそのものずばりの説明が挙げられています。

> Desired Behavior | MySQL 5.7.x Versions Except 5.7.4 Through 5.7.7 | MySQL
> 5.7.4 Through 5.7.7  
>  insert '0000-00-00', produce no warning | NO_ZERO_DATE not enabled | strict
> mode not enabled

というわけで、

  * 5.7.4～5.7.7は厳密モードを有効にしないこと
  * それ以外は`NO_ZERO_DATE`を有効にしないこと

だそうです。


CC BY-SA 3.0
2017-10-07T04:35:02.207
38505
2017-10-07T04:35:02.207
4236
38502
answer