想知道是否有人可以帮我解决mysql的数据类型问题。我希望能够加载最大字符长度为19但最大精度为17的数字(小数点后可以有17位数)。我尝试过使用float(19,17)和decimal(19,17),但是当我尝试加载一个像02.11111111112222222这样的数字时,它不会捕获完整的数字。提前致谢
答案 0 :(得分:1)
您可以使用小数
select sum(qty), SUM(CASE WHEN date_added < CURDATE() THEN qty ELSE 0 END)
from inventory_movement
where dated_added <= CURDATE()
GROUP BY cat_id
https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html
答案 1 :(得分:0)
Mysql将此值存储为2.11111111112222222
,即不带前导0。
检查mysql文档的十进制类型,它说: DECIMAL列不存储前导+字符或 - 字符或前导0位数。如果将+0003.1插入DECIMAL(5,1)列,则将其存储为3.1。对于负数,不存储文字字符。
前导0大小写适用于您的值,而mysql不存储它。因此,您将2.11111111112222222
存储在表格中。
检查https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html
如果你想存储前导零,也可以在数据类型之后包含UNSIGNED ZEROFILL更改定义:
CREATE TABLE your_table
(
your_column DECIMAL(19,17) UNSIGNED ZEROFILL
);
请注意:
如果您输入2.11111111112222222
,您将获得零填充以使小数点前的数字计数为19-17并获得02.11111111112222222
如果您输入02.111111111122222
,您将获得零填充,以使小数点后的数字计数为17。