LoginSignup
6
2

More than 5 years have passed since last update.

UNSIGNEDなカラムの演算でマイナス値になるとエラーになる

Last updated at Posted at 2015-03-22

普段MySQL使っていても意外と忘れるのでこちらに備忘録として残します.

例えば, こんな感じのtestテーブルがあるとします.

# Column Name 種別 属性
1 id int
2 signed_column int
3 unsigned_column int unsigned

ここに signed_column: 1, unsigned_column: 1としてデータを挿入します.

id signed_column unsigned_column
1 1 1

2つのカラムを合算するようなqueryを実行します.

SELECT id, `signed_column` + `unsigned_column` AS sum FROM `test`;

当然このqueryの結果は, 下記のようになります.

id sum
1 2

次に同様に, signed_column:-2, unsigned_column: 1としてデータを挿入します.

id signed_column unsigned_column
1 1 1
2 -2 1

先ほどと同じqueryを実行します.

SELECT id, `signed_column` + `unsigned_column` AS sum FROM `test`

すると, 下記のようなエラーになってしまいます...

#1690 - BIGINT UNSIGNED value is out of range in '(`test`.`signed_column` + `test`.`unsigned_column`)';

このエラーを防ぐにはUNSIGNEDなカラムをCASTしてから計算すると良いです.

SELECT id, `signed_column` + CAST(`unsigned_column` AS SIGNED) AS sum FROM `test`;

これで求めていた結果が算出できるようになります.

id sum
1 2
2 -1

両方がINT型だと思って単純に計算しようとしてもこういった意外なところでエラーになるので気をつけたいですね.

参考:
http://d.hatena.ne.jp/bs_outcast/20110820/1313829684

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2