MySQL4.xでは大丈夫だったけど、MySQL5.xに移行してから起こった出来事。
整数型カラムをUNSIGNEDして利用している時、負の数にならないのをいい事に0から減算して負の数の場合は0と自動で処理してくるものだと思っていた。(MySQL4.x時にはそのように処理されていた。)
本当はプログラム側で処理するべきなのかもしれないけれど、楽してそのようなスクリプトを書いていた。
で、先日MySQL5.xの環境に移行したらデータがおかしくなっていた。
とてつもなく大きな数字となっており???状態。
どうやら、UNSIGNEDしているカラムが0で、そこから1を引くと4294967295のような値になってしまうようだ。
これを回避するにはコマンドラインオプションで
--sql-mode=NO_UNSIGNED_SUBTRACTION
とするか、SQL発行時に
SET SQL_MODE='NO_UNSIGNED_SUBTRACTION';
とすると大丈夫のようだ。
参考: http://mlog.euqset.org/archives/ml@mysql.gr.jp/14844.html