3

integer長さ10のタイプの列があります:

`some_number` int(10) unsigned NOT NULL

この列に長すぎる数値を挿入します。

$some_number = 715988985123857;
$query = "INSERT INTO this_table SET some_number = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param('i', $some_number);
$stmt->execute();

表にあるものを見ると、番号は次のようになりました。

2147483647

どのように、そしてなぜ715988985123857になったの2147483647ですか?
なぜ切り捨てられなかったのですか?
この変換の背後にあるメカニズムは何ですか?また、結果の数値は何らかの式で計算できますか?


私は解決策を探していません。具体的な数字を理解したいだけです。

4

3 に答える 3

0

私の知る限り、PHP、bcx とは何の関係もありません。

  • PHP が整数型の境界を超える数値を検出すると、代わりに float として解釈されます。
  • また、整数型の境界を超える数値になる操作は、代わりに float を返します。

そのため、値を変更するのは SQL の機能になります。

于 2014-05-08T19:03:42.627 に答える