静安网站建设,北京哪家公司做网站好,深圳中建南方建设集团网站,随州网站设计开发服务1、数值数据类型
1.1 整数类型(精确值)
INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
MySQL支持SQL标准的整数类型INTEGER (或INT)和SMALLINT。作为标准的扩展#xff0c;MySQL还支持整数类型TINYINT、MEDIUMINT和BIGINT。下表显示了每种整数类型所需的存储和范围。…1、数值数据类型
1.1 整数类型(精确值)
INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
MySQL支持SQL标准的整数类型INTEGER (或INT)和SMALLINT。作为标准的扩展MySQL还支持整数类型TINYINT、MEDIUMINT和BIGINT。下表显示了每种整数类型所需的存储和范围。 1.2 定点类型(精确值)
DECIMAL, NUMERIC
DECIMAL和NUMERIC类型存储精确的数值数据值。当需要保持精确的精确度(exact precision)时例如货币数据就会使用这些类型。在MySQL中NUMERIC被实现为DECIMAL因此下面关于DECIMAL的说明同样适用于NUMERIC。
在DECIMAL列声明中可以(通常是)指定精度和比例。例如:
salary DECIMAL(5,2)在本例中5是精度(precision)2是刻度(scale)。精度表示为值存储的有效位数(significant digits)刻度表示可以在小数点后存储的位数。
标准SQL要求DECIMAL(5,2)能够存储5位数字和2位小数的任何值因此可以存储在salary列中的值范围为-999.99到999.99。
在标准SQL中DECIMAL(M)语法等价于DECIMAL(M,0)。类似地DECIMAL语法等价于DECIMAL(M,0)其中允许实现决定M的值。MySQL支持这两种不同形式的DECIMAL语法。M的缺省值为10。
如果刻度为0则DECIMAL值不包含小数点或小数部分。
DECIMAL的最大位数是65但是给定DECIMAL列的实际范围可以受到给定列的精度或scale 的限制。如果为此类列分配的值的小数点后的数字多于指定刻度所允许的数字则该值将转换为该刻度。(精确的行为是特定于操作系统的但通常效果是截断到允许的位数。)
1.3 浮点类型(近似值)
FLOAT, DOUBLE
FLOAT和DOUBLE类型表示近似的数值数据值。MySQL使用4个字节作为单精度值8个字节用于双精度值。
对于FLOAT, SQL标准允许精度(precision )的可选规范(但不允许指数(exponent)的范围)在关键字FLOAT后面的括号中即FLOAT(p)。MySQL也支持这个可选的精度规范但FLOAT§中的精度值仅用于确定存储大小。精度从0到23会产生一个4字节的单精度FLOAT列。精度从24到53会产生一个8字节的双精度DOUBLE列。
MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。这里(M,D)表示这些值总共可以存储M位其中可以在小数点后D位。例如定义为FLOAT(7,4)的列显示为-999.9999。MySQL在存储值时执行舍入因此如果将999.00009插入FLOAT(7,4)列近似结果为999.0001。
从MySQL 8.0.17开始非标准的FLOAT(M,D)和DOUBLE(M,D)语法已经弃用你应该可以期待在MySQL的未来版本中对它的支持被移除。
由于浮点值是近似值而不是存储为精确值因此在比较中试图将它们视为精确值可能会导致问题。它们还受平台或实现依赖关系的制约。有关更多信息请参见B.3.4.8节“浮点值的问题”。
为了获得最大的可移植性需要存储近似数值数据值的代码应该使用FLOAT或DOUBLE PRECISION而不需要指定精度或位数。