MySQL的數據類型之一是DECIMAL,表示精確數值,可以精確到小數點后任意位數(最高支持65位),非常適合表示金融、科學等領域的數據。
然而,DECIMAL的精度并非總能得到保障。如果使用了不正確的精度設置,將有可能出現精度丟失的問題。
CREATE TABLE `test_table` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `value` DECIMAL(10,2) NOT NULL, PRIMARY KEY (`id`) );
以上是一個樣例表的定義,其中DECIMAL(10,2)表示該字段的總長度為10,小數點后面保留2位小數。
假設我們要插入的值是123456.7890123456789,它的小數位數顯然超過了DECIMAL(10,2)的限制,如果直接插入會出現以下情況:
INSERT INTO `test_table` (`value`) VALUES (123456.7890123456789); SELECT * FROM `test_table`;
運行后的輸出如下:
+----+---------------+ | id | value | +----+---------------+ | 1 | 123456.790000 | +----+---------------+
可以看到,實際存儲的值變成了123456.790000,原本的小數位(3456789)被丟失了。
為了避免這種情況,我們應該在定義DECIMAL字段時盡量恰當地選擇精度。以本例為例,如果選擇DECIMAL(15,8)則可以完美存儲上述值。
ALTER TABLE `test_table` MODIFY COLUMN `value` DECIMAL(15,8); INSERT INTO `test_table` (`value`) VALUES (123456.7890123456789); SELECT * FROM `test_table`;
運行后的輸出如下:
+----+---------------------+ | id | value | +----+---------------------+ | 1 | 123456.78901235 | +----+---------------------+
可以看到,現在插入的值得到正確保存了。
上一篇css制作空調圖標