&引用;MySQL插入到。。。选择";十进制值中的错误

&引用;MySQL插入到。。。选择";十进制值中的错误,mysql,type-conversion,Mysql,Type Conversion,我的问题是: INSERT INTO `temp_map_196` (SELECT DISTINCT NULL,NULL,NULL, t1.`price`, t1.`price`, COUNT(*) AS `count` FROM `raw_table_1` t1 GROUP BY `price` ORDER BY `count` DESC) t1.price是一个DECIMAL列。这些值被插入到varchar列中 1、10、10.5都正确插入 但是1.6和1.

我的问题是:

INSERT INTO `temp_map_196`
(SELECT DISTINCT
   NULL,NULL,NULL,
   t1.`price`,
   t1.`price`,
   COUNT(*) AS `count`
 FROM  `raw_table_1` t1
 GROUP BY `price`
 ORDER BY `count` DESC)
t1.price
是一个
DECIMAL
列。这些值被插入到
varchar
列中

1、10、10.5都正确插入

但是
1.6
1.8
变成
1.60000002384186
1.79999523628

如果我将查询更改为:

INSERT INTO `temp_map_196`
(SELECT
   NULL,NULL,NULL,
   1.6,
   1.6,
   1
)
一切正常

当我将原始查询更改为:

INSERT INTO `temp_map_196`
(SELECT DISTINCT
NULL,NULL,NULL,
CAST (t1.`price` AS DECIMAL(8,2)),
CAST (t1.`price` AS DECIMAL(8,2)),
COUNT(*) AS `count`
FROM  `raw_table_1` t1
GROUP BY `price`
ORDER BY `count` DESC)
但我不能这样做,因为列并不总是接收十进制值


为什么MySQL在源数据中似乎不存在这些奇怪的小数时却插入这些小数?(使用
INSERT
查询的
SELECT
部分并自行运行,就不会有这种奇怪的值)。

存储在
十进制
列中的数字在内部作为字符串处理。这样,就不会因为从/到二进制基数的转换而丢失数据

但是,有时MySQL会忘记值来自
十进制
列,而值会自动转换为
浮点
,这是一种纯数字列类型,会导致精度损失。这种情况相当罕见,我也不完全确定其原因,但当值来自子查询时,这种情况往往会发生

在您的情况下,由于数字的最终目的地是一个字符串,我建议您尽快转换为string

INSERT INTO `temp_map_196`
(SELECT DISTINCT
NULL,NULL,NULL,
CAST (t1.`price` AS CHAR),
CAST (t1.`price` AS CHAR),
COUNT(*) AS `count`
FROM  `raw_table_1` t1
GROUP BY `price`
ORDER BY `count` DESC)

但我不能这样做,因为列不总是接收十进制值。
-为什么不总是接收十进制值?这不可能,因为
price
是十进制的。为什么要对用于填充另一个表的查询进行排序?这似乎有点困难。试试
CAST(t1.price AS CHAR)
如果在没有小数的情况下,价格为12.00,会有什么问题?这可能会对您有所帮助。