【发布时间】:2018-07-12 05:21:42
【问题描述】:
想知道是否有人可以帮助我解决 mysql 的数据类型问题。我希望能够加载最大字符长度为 19 但最大精度为 17 的数字(因此小数点后可以有 17 位数字)。我试过使用 float(19,17) 和 decimal(19,17) 但是当我尝试加载一个数字时,比如 02.11111111112222222 它不会捕获完整的数字。提前致谢
【问题讨论】:
标签: mysql sqldatatypes
想知道是否有人可以帮助我解决 mysql 的数据类型问题。我希望能够加载最大字符长度为 19 但最大精度为 17 的数字(因此小数点后可以有 17 位数字)。我试过使用 float(19,17) 和 decimal(19,17) 但是当我尝试加载一个数字时,比如 02.11111111112222222 它不会捕获完整的数字。提前致谢
【问题讨论】:
标签: mysql sqldatatypes
你可以使用小数
decimal(19,17)
https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html
【讨论】:
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。
【讨论】: