MySQL 5.1提供了对精度数学的支持,也就是说,数值处理功能,它能给出极其精确的结果,并能对无效值进行高度控制。精度数学基于下述两种特性:
· SQL模式,控制服务器接受或拒绝无效值的严格程度(请参见5.3.2节,“SQL服务器模式”)。
· 用于定点算法的MySQL库。
对于数值操作,这些特性具有数种隐含意义:
· 精确计算:对于准确值数值,计算不会引入浮点错误。相反,将使用准确的精度。例如,对于数值.0001,会将其当作准确值予以处理,而不是近似值,将其加10000次可获得准确的结果1,而不是近似于1的值。
· 定义良好的四舍五入特性:对于准确值数值,ROUND()的结果取决于其参量,而不是环境因素,如底层C库的工作方式等。
· 平台无关性:对准确数值的操作在不同平台上(如Unix和Windows)是相同的。
· 对无效值处理的控制:能够检测到溢出和除0情况,并会将其当作错误加以处理。例如,能够将对于某列来说过大的值当作错误对待,而不是对该值进行截短使之位于列数据类型的范围内。同样,也会将除0当作错误,而不是会获得NULL结果的操作。至于选择那种方式,它是由系统变量sql_mode的设置决定的(请参见5.3.2节,“SQL服务器模式”)。
这类特性的一个重要结果是,MySQL 5.1提供了与标准SQL的高度兼容性。
在下面的讨论中,介绍了精度数学的数种工作方式(包括与早期应用程序的可能的不兼容性)。在最后,给出了一些示例,演示了MySQL 5.1是如何精确处理数值操作的。