数値式の評価中にオーバーフローが発生すると、MySQL がエラーを生成することはわかっています。たとえば、最大の符号付き BIGNT は 9223372036854775807 であるため、次の式はエラーを生成します-
mysql> Select 9223372036854775807 + 1; ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807+1)'
MySQL は、次の方法でこのような種類のオーバーフローを処理できます。
MySQL は、値を符号なしに変換することで、このような種類の操作を可能にします。次のように-
mysql> Select CAST(9223372036854775807 AS UNSIGNED) +1; +------------------------------------------+ | CAST(9223372036854775807 AS UNSIGNED) +1 | +------------------------------------------+ | 9223372036854775808 | +------------------------------------------+ 1 row in set (0.07 sec)
MySQLは正確な値の算術を使用して上記の式を処理できます。オペランドの範囲によってはオーバーフローが発生するためです。たとえば、上記の計算は、次のように DECIMAL 値を使用して実行できます。 -
mysql> Select 9223372036854775807.0 + 1; +---------------------------+ | 9223372036854775807.0 + 1 | +---------------------------+ | 9223372036854775808.0 | +---------------------------+ 1 row in set (0.01 sec)
以上がMySQL は数値式の評価中にオーバーフローをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。