細かいですが、気づきがあったのでメモ。
DBはSQL Server 2005。
ちなみに開発環境はVS2005。
言語はVB.NET。
DBデザインを考えるときに数値型のカラムは今までNumeric型を使用していた。
特に意識して数値型を使い分けている訳ではなかったが、
とりあえず桁数、小数点をそれぞれ任意で指定できるし、桁が大きくなっても問題ない。
特に大規模なシステムなわけではないので、大は小をかねる、発想でこれを使っていた。
今回開発に携わったDBは数値型にINT型を使っている。
そこに今回落とし穴。
例えばNumeric型のカラムに’’(カラ)を挿入しようとすると型変換エラーで落ちちゃいます。
なのでアプリ側の制御として’’はNULLに変換してSQLは流さないといけない。
そこは毎回チェックするところというか、そんなことやるのは当たり前なので。
ところが今回見落としてしまいました。
しかもエラーが出る訳ではない。数値型に’’(カラ)を挿入しているにも関わらず。
最初はデフォルト値を設定しているのかと。
カラを挿入するとデフォルト値を使うようになっているのかと。
まあでもそんなわけでもなく。
確認するとINT型だから?
DecimalとNumericはエラーでこけます。
ところがINT型だと’’(カラ) は 0 として登録しまう。
しかも’’にいくら半角スペースが入っていてもTrimされるのか、問題なし。
とりあえずカラをCASTしてみると下記が0に変換しちゃいます。
bigint、int、smallint、tinyint、float、real、money
これってSQL Server 使う上で常識?
気づかないのはデータ型の本質を理解していないからのような気もするが。
まあとりあえずいまさらですが勉強になりました。
分からないことが多すぎて。
日々精進。
0 件のコメント:
コメントを投稿