当ブログのおすすめ記事はこちら!
  • 【学生でもできる】エンジニアとして海外ノマドワークをする方法と実際に感じたこと

【SQL】小数点のつく数値をいれるならdoubleではなく、decimalを使うべき

SHARE

【SQL】小数点のつく数値をいれるならdoubleではなく、decimalを使うべき



こんにちはTakumi(@ynwa_ynwa_0826)です。

DBのスキーマを設定する際に、数値の型はどのように設定していますか?
小数点がつくとすれば、double型を使う人もおおいと思います。

が!double型を使うと問題が発生しがちです。浮動小数点数として格納されるためです。。
よって、基本的にdecimal型を使うようにしましょう。

以下に事例を書いておきます。

selectがうまくできない事例

column1をdouble型(double(6,2))とします。
ちなみにこれはMySQLの5.7.2より発生する事例です。

select * from table1 where column1 = '6.81'

columnに6.81が入っていたとしても、このselectのクエリはnullを返します!

しかし、decimalにかえると、問題なく値を返してくれます。

これはdouble型が浮動小数点となっているためにwhere句で指定している6.81と誤差が発生しているためと考えられます。
(シングルクォーテーションが入っているので型変換がおきており、DBの値とうまく合致していないのかと。)

これに対しdecimalは浮動小数点ではなく正確な値を格納してくれます。

このような事例は6.81以外にもあると思われます。よってあまり使わないほうが良いですね。decimalを使用しましょう。



スポンサードリンク


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です