MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLは数値式の評価中にオーバーフローをどのように処理しますか?


数式の評価中にオーバーフローが発生した場合、MySQLはエラーを生成することがわかっています。たとえば、最大の符号付きBIGNTは9223372036854775807であるため、次の式はエラーを生成します-

mysql> Select 9223372036854775807 + 1;
ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807+1)'

MySQLは、次の方法でこの種のオーバーフローを処理できます。

値を符号なしに変換することによって

MySQLは、次のように値をunsignedに変換することにより、このような種類の操作を可能にします-

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)

  1. スプリングブートはローカルホストMySQLにどのように接続しますか

    これには、application.properties-を使用します spring.datasource.username=yourMySQLUserName spring.datasource.password=yourMySQLPassword spring.datasource.url=jdbc:mysql://localhost:3306/yoruDatabaseName spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 上記の構文を理解するために、テーブルを作成しましょう- mysql> create t

  2. レールは宝石をどのように処理しますか?

    数週間前、RubyGemsがRubyのロードパスを管理する方法について書きました。ただし、RailsはRubyGemsを直接使用せず、Bundlerを使用してgemを管理します。 Bundlerがどのように機能するかわからない場合、宝石がRailsに引き込まれる方法は少しに思えるかもしれません。 魔法の。 Gemfileに行を追加するにはどうすればよいですか アプリにコードを入れますか? Bundler、Rails、RubyGemsがどのように連携して、依存関係の処理を容易にしますか? なぜBundlerなのか? Bundlerは厳密な宝石マネージャーだと思います。つまり、 Bundler