Strict ModeってのはSTRICT_TRANS_TABLES、STRICT_ALL_TABLESのどちらかが有効になってる状態の事。
設定方法はmy.cnfに書くんですが、そもそもStrict Modeって何って話からですね。
Strict Modeとは
この設定はカラムに不正な値を入れた場合に警告じゃなくてエラーを返すというもの。
例えばcharのカラムに"1"という文字列を入れたい時、Strict Modeがoffの場合はダブルコーテーションを付けないとエラーになる。Strict Modeがoffだとうまいことやってくれる。
細かい挙動もオプションで制御可能。
例えばStrict Modeをonにした状態でDateのカラムに"2012-04-31"と入れるとエラーになる。
だけどALLOW_INVALID_DATESをonにすれば"0000-00-00"として登録される。
STRICT_TRANS_TABLESはInnodb等のトランザクションをサポートするエンジンのみのStrict Modeの設定で、これがデフォルトではonになっている。
ちなみにSTRICT_ALL_TABLESは全エンジン向けだが、トランザクションがないエンジンで使う場合はエラーが発生したタイミングでロールバックできないので注意が必要。
設定方法
設定方法はmy.cnfに書くのが一般的。
sql-mode=""オプションに書く。
その他、実行中に変更することもこんな感じで可能。
SET sql_mode = 'HIGH_NOT_PRECEDENCE';
現在設定されているモードを確認するには下記のコマンドを使う。
SELECT @@global.sql_mode;
SELECT @@session.sql_mode;
なんで気づいたか
テーブルをInnodbに変えたタイミングで下記のようなエラーが出たから。Error updating database. Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data truncated for column 'hoge_colum' at row 133
こういうの出たらStrict Modeが怪しいかもって事ですね。
またひとつ勉強になった。
詳しくはこちらを
http://dev.mysql.com/doc/refman/5.1/ja/server-sql-mode.html
Webエンジニアのための データベース技術[実践]入門 (Software Design plus) | |
松信 嘉範 技術評論社 2012-03-09 売り上げランキング : 19998 Amazonで詳しく見る |