LoginSignup
12
11

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-04-07

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等でを行うとエラー
  • 設定が無効
    • デフォルトのストレージエンジンで実行される
12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11