0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

値'6.81'が検索対象に引っかからない【MySQL 5.7.2】

Last updated at Posted at 2020-05-03

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

が!double型を使うと、浮動小数点数として格納されます。それは以下のような問題を発生させる可能性があります。
よって、基本的にdecimal型を使うようにしましょう。

理由:double型を使用すると、検索結果が正しくなくなる事例があるため

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

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を使用しましょう。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?