1

av simple databaseを使用していて、A(bigINT 20)、B(bigInt 20)、c(DECIMAL(5,4))の3つの列があり、次のクエリを実行すると、以下の結果が得られます。

REPLACE INTO `my_table` SET `A` = 8,`B` = 44,`C` = 14;

私はこれらの値をmysqlA= 8、b = 44、cで9.9999として取得します!?

なぜこれが起こっているのか、そしてこれを解決するために私は何ができるのかについてのアイデアはありますか?

4

1 に答える 1

5

DECIMAL(5,4)数値の最大5桁数が4小数点以下であることを意味します。したがって14、が必要になるので、単にオーバーフローしますDECIMAL(6,4)

14一定の精度の小数点として内部的にここにあるため、オーバーフローをクリアする必要があります(つまり14.0000、5を超える6桁)。

14.0000したがって、 (6桁)を(最大5桁)に入れようとすると、DECIMAL(5,4)MySQLは要求した値に最も近い値を選択します。したがって14.0000、に「丸められ」9.9999ます。

列に合わせる14には、拡張するかDECIMAL(6,4)(一般に、より多くの桁を許可するため)、またはに変更することができDECIMAL(5,3)ます(小数点の前にさらに1桁を許可しますが、もちろんある程度の精度は失われます)。

于 2012-08-20T12:35:11.897 に答える