Home  >  Article  >  Database  >  Why Does a Large Integer Value Transform into 2147483647 When Inserted into a MySQL INT Column?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-01 09:57:02776browse

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

Understanding Integer Truncation Discrepancy

Consider a situation where you have an integer column with a length of 10, as follows:

<code class="sql">`some_number` int(10) unsigned NOT NULL</code>

When inserting a value larger than the column's allowed range:

<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>

You might expect truncation to occur, resulting in a shorter value. However, surprisingly, the value in the table transforms into 2147483647.

Mechanism Behind the Transformation

According to MySQL documentation, integer overflow for types int and integer will result in the maximum allowed number, which in this case is 2147483647. This behavior is not truncation but rather a modulo operation, which takes the remainder of the original value divided by the maximum allowed number.

Formula for Calculation

To calculate the result of integer overflow, use the following formula:

result = original_value % maximum_allowed_value

In this case:

result = 715988985123857 % 2147483647 = 2147483647

Therefore, the large value of 715988985123857 becomes 2147483647 in the database due to integer overflow and the modulo operation.

The above is the detailed content of Why Does a Large Integer Value Transform into 2147483647 When Inserted into a MySQL INT Column?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn