MySQLのINT等の整数型カラム(UNSIGNED)から減算する時に注意
- 2009.10.29
- MySQL
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
-
前の記事
OpenPNEで全然ログイン出来ない 2009.10.16
-
次の記事
LogWatchのhttpd(Apache)に大量のログが添付される場合の対処 2009.11.02