Documentation Home

12.25 精密数学

MySQL 提供对精确数学的支持:数值处理可导致极其准确的结果和对无效值的高度控制。精确数学基于以下两个特征:

  • 控制服务器接受或拒绝无效数据的严格程度的 SQL 模式。

  • 用于定点运算的 MySQL 库。

这些功能对数字操作有多种影响,并提供与标准 SQL 的高度合规性:

  • 精确计算:对于精确值数字,计算不会引入浮点错误。相反,使用精确精度。例如,MySQL 将诸如 之类的数字视为.0001 精确值而不是近似值,将其相加 10,000 次会产生精确的结果 1,而不仅仅是 接近 1 的值。

  • 明确定义的舍入行为:对于精确值数字,结果 ROUND()取决于其参数,而不取决于环境因素,例如底层 C 库的工作方式。

  • 平台独立性:在不同平台(例如 Windows 和 Unix)中,对精确数值的操作是相同的。

  • 控制无效值的处理:溢出和除以零是可检测的,可以被视为错误。例如,您可以将对于列来说太大的值视为错误,而不是将该值截断以使其位于列数据类型的范围内。同样,您可以将被零除视为错误,而不是将其视为产生结果的操作 NULL。选择采用哪种方法取决于服务器 SQL 模式的设置。

以下讨论涵盖了精确数学如何工作的几个方面,包括与旧应用程序可能不兼容的问题。最后给出了一些例子,演示了MySQL是如何精确处理数值运算的。有关控制 SQL 模式的信息,请参阅第 5.1.11 节,“服务器 SQL 模式”