MySQL INT カラムに挿入すると、大きな整数値が 2147483647 に変換されるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-01 09:57:02
オリジナル
775 人が閲覧しました

Why Does a Large Integer Value Transform into 2147483647 When Inserted into a MySQL INT Column?

整数の切り捨ての不一致について

次のように、長さが 10 の整数列がある状況を考えてみましょう。

<code class="sql">`some_number` int(10) unsigned NOT NULL</code>
ログイン後にコピー

列の許容範囲より大きい値を挿入する場合:

<code class="php">$some_number = 715988985123857;
$query = "INSERT INTO this_table SET some_number = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param('i', $some_number);
$stmt->execute();</code>
ログイン後にコピー

切り捨てが発生し、結果として値が短くなることが予想される場合があります。しかし、驚くべきことに、テーブルの値は 2147483647 に変換されます。

変換の背後にあるメカニズム

MySQL ドキュメントによると、int 型と integer 型の整数オーバーフローは次のようになります。許可される最大数 (この場合は 2147483647)。この動作は切り捨てではなく、元の値を許可される最大数で割った余りを求めるモジュロ演算です。

計算式

整数オーバーフローの結果を計算するには、次の式を使用します。

result = original_value % maximum_allowed_value
ログイン後にコピー

この場合:

result = 715988985123857 % 2147483647 = 2147483647
ログイン後にコピー

したがって、 の大きな値は715988985123857 は、整数オーバーフローとモジュロ演算により、データベースでは 2147483647 になります。

以上がMySQL INT カラムに挿入すると、大きな整数値が 2147483647 に変換されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!