数值类型
精确值运算的精度数学范围包括精确值数据类型(整数和DECIMAL类型)和精确值数字文字。近似值数据类型和数字文字作为浮点数处理。
精确值数字文字具有整数部分或小数部分,或两者都有。它们可能已签名。例如:1,.2,3.4,-5,-6.78,+9.10。
近似值数字文字以科学计数法表示,并带有尾数和指数。这两个部分中的一个或两个都可以签名。例如:1.2E3,1.2E-3,-1.2E3,-1.2E-3。
看起来相似的两个数字可能会有所不同。例如,2.34是一个精确值(定点)数字,而是2.34E0一个近似值(浮点)数字。
DECIMAL数据类型是一个定点类型和计算是精确的。在MySQL中,DECIMAL类型有多个同义词:NUMERIC,DEC,FIXED。整数类型也是精确值类型。
该FLOAT和DOUBLE数据类型是浮点类型,其计算是近似的。在MySQL中,类型与同义FLOAT或DOUBLE有DOUBLE PRECISION和REAL。
DECIMAL数据类型特征
本节讨论DECIMAL数据类型(及其同义词)的特征,特别是以下主题:
- 最大位数
- 储存格式
- 储存要求
- 非标准MySQL扩展到
DECIMAL列的上限
DECIMAL列的声明语法为。自变量的值范围如下:DECIMAL(M,D)
M是最大位数(精度)。范围是1到65。D是小数点右边的位数(小数位数)。范围是0到30,并且不能大于M。
如果D省略,则默认值为0。如果M省略,则默认值为10。
最大值65 M表示对DECIMAL值的计算最多可精确到65位。此65位精度的限制也适用于精确值数字文字,因此此类文字的最大范围与以前有所不同。
DECIMAL列的值使用二进制格式存储,该格式将9个十进制数字打包为4个字节。每个值的整数和小数部分的存储要求分别确定。九位数的每个倍数需要4个字节,剩余的任何剩余位数都需要4字节的一部分。下表列出了剩余数字所需的存储量。
| 剩余数字 | 字节数 |
|---|---|
| 0 | 0 |
| 1–2 | 1个 |
| 3–4 | 2 |
| 5–6 | 3 |
| 7–9 | 4 |
例如,一DECIMAL(18,9)列在小数点的任一侧都有9位数字,因此整数部分和小数部分每个都需要4个字节。一DECIMAL(20,6)列有十四个整数数字和六个小数位数。整数位中的9位需要4个字节,其余5位需要3个字节。六个小数位需要3个字节。
DECIMAL列不存储前导+字符或-字符或前导0数字。如果插入+0003.1到一个DECIMAL(5,1)列,它被存储为3.1。对于负数,-不存储文字字符。
DECIMAL列不允许大于列定义所隐含范围的值。例如,一DECIMAL(3,0)列支持的范围为-999至999。一列允许小数点左边最多-位。DECIMAL(M,D)MD
SQL标准要求的精确度是准确数字。对于,该标准要求至少为几位的精度,但允许更高的精度。在MySQL中,和相同,并且都具有精确的数字精度。NUMERIC(M,D)MDECIMAL(M,D)MDECIMAL(M,D)NUMERIC(M,D)M
有关DECIMAL值的内部格式的完整说明,请参见strings/decimal.cMySQL源代码分发中的文件。在decimal2bin()函数中解释了格式(带有示例)。
