MySQL 中的 DOUBLE 与 DECIMAL

2023-11-27

好的,所以我知道有大量文章指出我不应该使用 DOUBLE 在 MySQL 数据库上存储资金,否则我最终会遇到棘手的精度错误。重点是我不是在设计一个新的数据库,而是要求我找到优化现有系统的方法。新版本包含 783 个 DOUBLE 类型列,其中大部分用于存储金钱或计算金额的公式。

所以我对这个主题的第一个意见是我应该强烈建议在下一个版本中从 DOUBLE 转换为 DECIMAL,因为 MySQL 文档和每个人都这么说。但后来我找不到任何好的论据来证明这一建议的合理性,原因有以下三个:

  • 我们不对数据库执行任何计算。所有操作均在 Java 中使用 BigDecimal 完成,MySQL 仅用作结果的普通存储。
  • DOUBLE 提供的 15 位精度已经足够了,因为我们主要存储 2 位小数的金额,偶尔也存储 8 位小数的小数字作为公式参数。
  • 我们在生产中拥有 6 年的记录,没有因 MySQL 端精度损失而出现任何已知错误问题。

即使在 1800 万行的表上执行操作(例如 SUM 和复杂乘法),我也无法执行缺乏精度的错误。我们实际上并没有在生产中做这类事情。我可以通过做类似的事情来显示损失的精度

SELECT columnName * 1.000000000000000 FROM tableName;

但我无法找到一种方法将其变成小数点后第二位的错误。我在互联网上发现的大多数实际问题都是 2005 年及更早版本的论坛条目,我无法在 5.0.51 MySQL 服务器上重现它们中的任何一个。

因此,只要我们不执行任何 SQL 算术操作(我们不打算这样做),仅在 DOUBLE 列中存储和检索金额是否会出现任何问题?


实际上是完全不同的。 DOUBLE 会导致舍入问题。如果你做了类似的事情0.1 + 0.2它给你类似的东西0.30000000000000004。我个人不相信使用浮点数学的财务数据。影响可能很小,但谁知道呢。我宁愿拥有我所知道的可靠数据,而不是近似数据,尤其是在处理货币价值时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 中的 DOUBLE 与 DECIMAL 的相关文章

  • MySQL获取最后10条记录中的第一条记录

    在Mysql中 我试图获取最后10条记录中最旧的记录 为了得到最后 10 个我会简单地做SELECT FROM table ORDER BY id DESC LIMIT 10 为了获得最旧的 我只需使用 ASC 顺序 我需要首先按 DESC
  • 不唯一的表/别名

    因此 我尝试使用多个联接来运行此查询 以获得我想要的精确行 但我不断收到此错误 不唯一的表 别名 ss prices 我正在运行的查询 select ss accounts id ss accounts bot acc id ss acco
  • UNIX时间记录时区吗?

    我想问一下UNIX时间 UNIX时间是否记录时区 我将托管从美国芝加哥移至 JST 问题是我的整个 MySQL 数据库都有 UNIX 时间 芝加哥 美国时区 的记录 我有一个 PHP 代码来显示之前的时间 例如 3 天前 昨天等 当我搬到新
  • MySQL中是否有类似Oracle中“level”的函数[重复]

    这个问题在这里已经有答案了 我面临一个场景 如果输入是 10 我想要一个数字序列 1 2 3 10 在甲骨文中levelfunction 提供了该功能 我想知道如何在 MySQL 中执行相同的任务 谢谢 您可以在 mysql 中使用此查询
  • 按 MAX(time) WHERE time <= x 选择最近的 MySQL 行

    我正在选择 MySQL 表的最新条目 SELECT MAX time as most recent userID FROM TableName GROUP BY userID ORDER BY most recent DESC 我的问题是
  • MySQL 错误 1290 (HY000) --secure-file-priv 选项

    我试图在我的脚本中使用以下代码将 MySQL 脚本的结果写入文本文件 SELECT p title p content c name FROM post p LEFT JOIN category c ON p category id c i
  • MySQL:你能指定一个随机限制吗?

    有没有办法在 SQL MySQL 中随机化限制数字 我希望能够做的是在查询中获取随机数量的结果以在插入子查询中使用 而无需任何服务器端脚本 我希望能够作为假设说明运行的查询是 SELECT id FROM users ORDER BY RA
  • MySQL 中的断言

    我有一个针对大型数据库运行的 SQL 脚本 我想在开始时提出几个简单的查询 作为健全性检查 有没有办法在MySQL中写断言 或者任何类型的 选择 如果它与该值不匹配 则中止整个脚本 一些疯狂的代码 要点是 SET可能会引发 mysql 变量
  • 更改Docker容器中的mysql密码

    我如何更改 docker 容器中的 root 密码 因为一旦我停止 mysql 服务 容器就会自动停止 我应该停止 mysql 容器并部署一个新容器吗 您可以使用正在运行的容器更改它docker exec session https doc
  • ejabberd 16.06 + mysql 5.5.50,消息历史记录不保存

    我使用ejabberd 16 06 mysql 5 5 50 消息历史记录没有保存 我的 ejabberd yml MySQL server odbc type mysql odbc server freldo odbc port 3306
  • 小数精度

    我使用小数类型进行高精度计算 货币 但我今天遇到了这个简单的划分 1 1 37 这应该再次得到 37 http www wolframalpha com input i 1 2F 281 2F37 29 http www wolframal
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7
  • 在python中将十进制转换为二进制[重复]

    这个问题在这里已经有答案了 python 中是否有任何模块或函数可以用来将十进制数转换为其等价的二进制数 我可以使用 int binary value 2 将二进制转换为十进制 所以有什么办法可以在不自己编写代码的情况下进行相反的操作吗 所
  • PHP 的 PDO 可以限制为单个查询吗?

    PHP 的 PDO 允许通过 query 方法或作为准备好的语句同时执行多个查询 以下两个示例均有效 Two SQL queries query SELECT FROM table DROP table Execute via query
  • 如何在 join 语句中进行计数

    我有桌子post int post id varchar title text content和表comment int comment id int post id varchar content其中 post id 是外键引用表帖子 如
  • Laravel Group By 和 Order By 不起作用

    我尝试制作一个Laravel 5 8项目 项目中的数据是这样的 id purch name prcvalue 1 10234 Nabila 100 2 10234 Nadeera 450 3 10234 Nabila 540 4 10234
  • 如何使用 PHP 从 MySQL 检索特定值?

    好吧 我已经厌倦了 过去一周我花了大部分空闲时间试图解决这个问题 我知道 SQL 中的查询已更改 但我无法弄清楚 我能找到的所有其他帖子似乎都已经过时了 如果有人能帮助我 我将非常感激 我想做的就是使用手动输入数据库的唯一 密码 来检索行的
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE
  • 哪个是识别关系或非识别关系中的子表?

    在表之间的识别和非识别关系的上下文中 MySQL 文档大量将表称为父表和子表 如何判断哪个表是父表 哪个表是子表 子表 A K A 弱实体 http en wikipedia org wiki Weak entity 是一个表 其主键属性d

随机推荐

  • delphi中打印到“Microsoft print to PDF”时如何设置文件名

    我试图在打印为 PDF 时设置文件名 设置 Printers pas Printer Title 适用于大多数 PDF 打印引擎 Adobe CutePDF 的默认 PDF 文件名 但不适用于 Microsoft 打印到 PDF 或 Mic
  • java.util.Date 和 Zoneddatetime 之间有什么区别?

    使用 util date 并从浏览器提供日期和服务时间 然后保存到数据库并将其取回时 它会根据设置给出不同的日期时间zoneddatetime直接来自服务 任何帮助 将不胜感激 tl dr java util Date 和 Zoneddat
  • 将不可为空字符串数组作为可空字符串数组传递

    我有一个函数 它接受一个Array
  • 从小范围内生成随机不重复整数

    我想要完成的任务如下 我希望从相对较小的范围创建一个整数向量 并确保没有一个整数后面跟着相同的整数 即 这是一个 合法 向量 1 3 4 2 5 3 2 3 5 4 这是一个 非法 向量 因为 5 跟在 5 之后 1 3 4 2 5 5 2
  • 允许红外设备发送信号来控制PC的显示器

    我有一台显示器 也可以用作电视 它有一个 DVI D 连接器和一个电缆连接器 有一段时间 我的计算机上有一个红外设备 我用它来同步我的 PDA 和手机 我希望我的电脑的红外 irDA 设备向我的显示器发送信号 以在电视和电脑模式之间切换 或
  • 如何将带有另一个字符串枚举的键的枚举传递到接受字符串的函数中?

    我正在尝试将字符串枚举传递到需要字符串的函数中 问题是这个字符串枚举必须从保存我们存储库中所有常量的 全局 常量枚举中分配 enum Constants hello Hello enum Potato h Constants hello f
  • 在 C# 中打印现有 PDF(或其他文件)

    从我正在构建的应用程序中 我需要打印现有的 PDF 由另一个应用程序创建 我如何在 C 中执行此操作并提供一种机制 以便用户可以选择不同的打印机或其他属性 我查看了 PrintDialog 但不确定它正在尝试打印什么文件 如果有 因为输出始
  • 查看最后一次接触文件的进程

    在 Linux 机器上 有一些进程大约每天定期更改目录和文件的权限 这不是我设置的过程 我也不知道它是什么 我有 root 访问权限 我可以轻松地手动更改权限以恢复访问权限 但这有点烦人 有没有办法查看最后一次接触文件的进程列表 或者 我将
  • 有没有用 PHP 编写的像样的 PHP 解析器? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我做了很多操作和分析 PHP 代码的工作 通常我只使用分词器去做这个 对于大多数应用程序来说这已经足够了 但有时使用词法分析器进行解析不够可靠 显然
  • Apple 提交规则和规定(SIM 卡数据访问)[已关闭]

    Closed 这个问题是无关 目前不接受答案 我对访问设备 SIM 卡数据 例如 SIM 序列号和用户电话号码 进行了大量研究 以下是我的发现 通过使用 iOS SDK 的私有 API 我们可以从 SIM 卡中提取所需的信息 如果已经存储在
  • JavaScript 中的“~”是什么意思

    我查看express的代码 看到这个代码https github com visionmedia express blob master lib application js L490 if all envs envs indexOf th
  • django admin:如何自定义字段集中的一个字段?

    我尝试在 django admin 的字段集中创建一个字段以仅显示某些数据 但根据Django 文档 仅举一个例子list display显示可以定制 我尝试了类似的方法fieldsets像下面这样 在 models py 中 def po
  • 将原始 diff 文件转换为彩色 html 输出

    有谁知道有一个脚本可以接受原始 diff 文件和漂亮的打印 HTML 输出 这将更容易审查 邮寄 谷歌搜索给我返回了一些结果 例如http kafka fr free fr diff2html 然而 所有这些脚本都需要两个文件作为输入 它们
  • “CLR20r3”代表什么? (clr是什么版本的)

    显而易见的选择是 CLR version 2 0 revision 3 但不幸的是没有这样的东西 我能得出的最接近的最终清单是维基百科 但使用主要 次要编号系统 出现此问题的原因是 我有一位客户尝试运行我的 net4 应用程序 但它不断崩溃
  • 隐藏(或加密)应用程序资源?

    我正在开发一个 Cocoa 应用程序 它具有我希望保护但仍显示的某些资源 图像 通常情况下 人们会将它们放在资源文件夹中 但存储在那里使得抓取和使用变得非常容易 有什么方法可以隐藏这些图像 但仍然可以在应用程序中访问它们 简单的解决方案 将
  • 如何修复 java.lang.AbstractMethodError: 未实现抽象方法

    我有这个活动 我得到了崩溃 说 java lang AbstractMethodError 抽象方法未实现 我该如何解决它 这就像我让活动成为未实现的东西的元素 但我不知道如何修复它 我多次遇到这个问题 但我不知道如何解决 public c
  • PHP 中的注册表模式还是单例模式?

    我现在正在使用 PHP 类和对象 在这个问题中 字段和方法的名称只是为了让您了解我在说什么而编写的 它与使用单例和注册表设计模式有关 现在假设我需要访问数据库对象 缓存对象 核心设置对象 会话对象 几乎所有其他类中我都需要访问这些对象 所以
  • 使用 python 和 FFT 计算均方位移

    给定一个二维数组 其中每行代表粒子的位置向量 如何有效计算均方位移 使用 FFT 均方位移定义为 其中r m 是第m行的位置向量 N是行数 以下针对 msd 的直接方法有效 但它是 O N 2 我改编了此代码stackoverflow 用户
  • ReplaceAll 为 java8 lambda 函数

    给定以下变量 templateText Hi name variables put name Joe 我想使用以下代码将占位符 name 替换为值 Joe 这不起作用 variables keySet forEach k gt templa
  • MySQL 中的 DOUBLE 与 DECIMAL

    好的 所以我知道有大量文章指出我不应该使用 DOUBLE 在 MySQL 数据库上存储资金 否则我最终会遇到棘手的精度错误 重点是我不是在设计一个新的数据库 而是要求我找到优化现有系统的方法 新版本包含 783 个 DOUBLE 类型列 其