MySQL不同的整数数据类型操作

时间:2015-06-17 03:26:48

标签: mysql sql sqldatatypes

在MySQL表中使用不同的数据类型来构建列。例如 SMALLINT MEDIUMINT INT 。据我所知,不同的数据类型会根据列类型影响表大小。因此,不必将 UNSIGNED INT 分配给范围在0-1000之间的值。

如果将MySQL中不同数据类型的值相乘,会发生什么情况(例如 SMALLINT * INT )?存储结果需要什么MySQL数据类型?

1 个答案:

答案 0 :(得分:1)

MySQL为算术运算定义了一些规则。

  • 如果两个操作数都是整数,则+-*结果计算为BIGINT(64位)精度(例如{{ 1}},SMALLINT

  • 如果两个操作数都是整数且其中任何一个都是INT,则结果为无符号整数。对于减法(UNSIGNED),如果启用了- SQL模式,则结果将被签名。

  • 如果NO_UNSIGNED_SUBTRACTION+-/*的任何操作数都是真实的(例如% }或FLOAT)或字符串值(例如DOUBLE)结果的精度是具有最大精度的操作数的精度。

在具有不同数据类型的列之间进行算术运算是安全的。 MySQL将自动转换为适当的格式。

至于存储结果,存在一些限制。

  • 如果插入了超出范围的值,则将存储最大端点(例如,插入130到'10.13e-3'将存储127并发出警告)。如果启用了严格模式,则插入将失败并引发错误。

  • 整数溢出导致无声环绕(例如9223372036854775807 + 1 = -9223372036854775808。这是因为它是使用TINYINT数据类型的最大可能操作。)

  • 当为浮点或定点列指定的值超出指定(或默认)精度和比例所隐含的范围时,MySQL会存储表示该范围的相应端点的值

  • 浮点溢出会产生BIGINT结果。某些操作可能会导致NULL+INF或“NaN”。

  • -INF数据类型,如果溢出,将被截断。并提出警告。

参考文献(来自dev.mysql.com):