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) のカラムに
- 設定が無効
- varchar(5) のカラムに
123456
をINSERTしようとすると12345
と切り詰めてINSERTされる
- varchar(5) のカラムに
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等でを行うとエラー
- 設定が無効
- デフォルトのストレージエンジンで実行される