Edited at

[MySQL] spl_mode について調べた結果

More than 1 year has passed since last update.


sql_mode

MySQLの挙動を制御する設定。

5.7にバージョンアップして色々ハマったので、

一度整理するために記事を書く。

調べたのは、デフォルトの設定たち。


ONLY_FULL_GROUP_BY

GROUP BYした場合の挙動を制御


  • 設定が有効


    • GROUP BYした場合SELECTする項目は全てGROUP BY句で指定しないとエラーになる(SQL標準)



  • 設定が無効


    • GROUP BY句で指定していない項目もSELECT可能(MySQL独自拡張)




NO_ZERO_DATE

0000-00-00 の挙動の制御


  • 設定が有効



    • 0000-00-00 の挿入でエラーになる



  • 設定が無効


    • 挿入可能




STRICT_TRANS_TABLES

通称:厳密モード

テーブル定義に反するINSERTやUPDATEを禁止し、エラーを発生させる


  • 設定が有効


    • varchar(5) のカラムに 123456 をINSERTしようとするとエラーになる



  • 設定が無効


    • varchar(5) のカラムに 123456 をINSERTしようとすると 12345 と切り詰めてINSERTされる




NO_ZERO_IN_DATE

2010-00-01 2010-01-00 のように月や日に0が入っている値を挿入する場合


  • 設定が有効 かつ 「STRICT_TRANS_TABLES」が有効


    • エラーになる



  • 設定が有効 かつ 「STRICT_TRANS_TABLES」が無効



    • 0000-00-00 が挿入され警告が出力される



  • 設定が無効


    • 挿入可能




ERROR_FOR_DIVISION_BY_ZERO

0除算を含むINSERTやUPDATEが会った場合の挙動を制御


  • 設定が有効 かつ 「STRICT_TRANS_TABLES」が有効


    • エラーになる



  • 設定が有効 かつ 「STRICT_TRANS_TABLES」が無効


    • NULL が挿入され警告が出力される



  • 設定が無効


    • NULL が挿入され警告無し




NO_AUTO_CREATE_USER

存在しないユーザーにGRANT文を発行した場合の挙動を制御


  • 設定が有効


    • エラーが発生する



  • 設定が無効


    • 自動的に新規ユーザーを作成しGRANT文が発行される




NO_ENGINE_SUBSTITUTION

ストレージエンジンの選択に影響


  • 設定が有効


    • 使用できないストレージエンジンを選択してCREATE TABLE等でを行うとエラー



  • 設定が無効


    • デフォルトのストレージエンジンで実行される