Edited at

MySQLの自動変換が厄介な時の設定

More than 5 years have passed since last update.


状況

親切なのか不親切なのか、カラムの型と異なったデータを挿入してもそれとなく丸めたり切ったりしてwarningを吐きつつもinsertやupdateに成功しちゃったりしてて困っている。


例えば

tinyintにそれ以上の値を入れたら丸めてくれたり、サイズ以上の文字列を入れるとその分カットして入れてくれたり・・・


対策

上記のようなものに関しては、

SET SESSION sql_mode='TRADITIONAL';

こんな感じでsql_modeを設定することで厳密にエラーとしてみてくれるようになります。

環境に応じて、SESSIONでなくGLOBALにしたり、cnfに書いたりすれば良いかと思います。

型チェックを厳格にするのはこれでいいと思いますが、他にも色々と細かく制御可能なので、

詳しくは

4.2.6. SQL モード

ココらへんを。