んと。
ちととある業務で色々ありまして「intで指定したカラムに小数点な数値がはいる」事故が発生しまして。
いやまぁ二次データなんで結構気ぃ抜いてたんですが orz
おいといて。
えと…ちょっと興味深いデータが見つかりまして実験をしてみたりしました。
create table aaa ( a int, b varbinary(8) );
で、以下のSQLを流します。
insert into aaa(a,b) values('1.0', '1.0'); insert into aaa(a,b) values('1.1', '1.1'); insert into aaa(a,b) values('1.2', '1.2'); insert into aaa(a,b) values('1.3', '1.3'); insert into aaa(a,b) values('1.4', '1.4'); insert into aaa(a,b) values('1.5', '1.5'); insert into aaa(a,b) values('1.6', '1.6'); insert into aaa(a,b) values('1.7', '1.7'); insert into aaa(a,b) values('1.8', '1.8'); insert into aaa(a,b) values('1.9', '1.9'); insert into aaa(a,b) values(2.0, '2.0'); insert into aaa(a,b) values(2.1, '2.1'); insert into aaa(a,b) values(2.2, '2.2'); insert into aaa(a,b) values(2.3, '2.3'); insert into aaa(a,b) values(2.4, '2.4'); insert into aaa(a,b) values(2.5, '2.5'); insert into aaa(a,b) values(2.6, '2.6'); insert into aaa(a,b) values(2.7, '2.7'); insert into aaa(a,b) values(2.8, '2.8'); insert into aaa(a,b) values(2.9, '2.9');
結果。
mysql> select * from aaa; +------+------+ | a | b | +------+------+ | 1 | 1.0 | | 1 | 1.1 | | 1 | 1.2 | | 1 | 1.3 | | 1 | 1.4 | | 1 | 1.5 | | 1 | 1.6 | | 1 | 1.7 | | 1 | 1.8 | | 1 | 1.9 | | 2 | 2.0 | | 2 | 2.1 | | 2 | 2.2 | | 2 | 2.3 | | 2 | 2.4 | | 3 | 2.5 | | 3 | 2.6 | | 3 | 2.7 | | 3 | 2.8 | | 3 | 2.9 | +------+------+ 20 rows in set (0.00 sec)
えと…シングルクォートで囲むかどうかで変化する上に囲まない数値については四捨五入してくださがりやります orz
もちろん。
もちろん「整数って言ってるところに小数ぶち込む方が悪い」のですが…が…せめてinsert errorにして欲しいって思うのはわがままなんでしょうか orz
もし万が一「奇妙なバグに悩まされたら」、可能性の一つとして知っておくと便利な知識…かも、しれません。
やれやれ orz