気ままNote

個人の技術メモ

MySQLのStrict Modeについて

開発用に使っていたDBを変えたところ、とあるクエリがINSERTできなくなる事案が発生。
どうやらMySQLsql_modeのひとつであるStrict Modeが原因のようでした。

そもそもStrict Modeを知らなかったのでそのメモ書きです。

環境

CentOS 6.4
MySQL 5.6.21

Strict Modeとは

  • 日本語にすると厳格モード
  • INSERT や UPDATE実行時に不正な値を入れないようにするためのもの
  • ちなみにINSERT IGNORE や UPDATE IGNOREで始まるようにするとエラー回避できる
  • 細かい挙動を扱うために、複数のモードを選択することができる

設定例

  • /usr/my.cnf
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #有効
# sql_mode='' #無効
SET GLOBAL sql_mode = 'mode name';
SET SESSION sql_mode = 'mode name';

確認方法

mysql> SELECT @@GLOBAL.sql_mode;
mysql> SELECT @@SESSION.sql_mode;

下記公式ドキュメントにはさらに詳しく記載されています。

原因はわかったのでとりあえず先に進めそうです。

参考

MySQL :: MySQL 5.6 Reference Manual :: 5.1.7 Server SQL Modes

MySQL5.6にしていくつかのSQLでエラーが出るようになった | シーズクリエイターズブログ