扩展 MySQL 8.0 / 第 6 章 向 MySQL 添加函数 /
12.22 精密数学
MySQL 提供对精确数学的支持:数值处理可导致极其准确的结果和对无效值的高度控制。精确数学基于以下两个特征:
控制服务器接受或拒绝无效数据的严格程度的 SQL 模式。
用于定点运算的 MySQL 库。
这些功能对数字操作有多种影响,并提供与标准 SQL 的高度合规性:
精确计算:对于精确值数字,计算不会引入浮点错误。相反,使用精确精度。例如,MySQL 将诸如 之类的数字视为
.0001
精确值而不是近似值,将其相加 10,000 次会产生精确的结果1
,而不仅仅是 “接近” 1 的值。明确定义的舍入行为:对于精确值数字,结果
ROUND()
取决于其参数,而不取决于环境因素,例如底层 C 库的工作方式。平台独立性:在不同平台(例如 Windows 和 Unix)中,对精确数值的操作是相同的。
控制无效值的处理:溢出和除以零是可检测的,可以被视为错误。例如,您可以将对于列来说太大的值视为错误,而不是将该值截断以使其位于列数据类型的范围内。同样,您可以将被零除视为错误,而不是将其视为产生结果的操作
NULL
。选择采用哪种方法取决于服务器 SQL 模式的设置。
以下讨论涵盖了精确数学如何工作的几个方面,包括与旧应用程序可能不兼容的问题。最后给出了一些例子,演示了MySQL是如何精确处理数值运算的。有关控制 SQL 模式的信息,请参阅第 5.1.10 节,“服务器 SQL 模式”。