&引用;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,会有什么问题?这可能会对您有所帮助。