>  기사  >  데이터 베이스  >  MySQL이 더 짧은 열에 삽입된 큰 정수를 변환하는 이유는 무엇입니까?

MySQL이 더 짧은 열에 삽입된 큰 정수를 변환하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-31 08:27:30762검색

Why does MySQL transform large integers inserted into shorter columns?

MySQL의 숫자 열 변환 이해

MySQL은 긴 정수를 더 짧은 열에 삽입할 때 예상치 못한 값으로 변환하는 경우가 많습니다. 잘라내는 대신 MySQL은 저장된 값을 조정합니다. 이 동작은 정수 오버플로 메커니즘에 기인합니다.

예를 들어 길이가 10인 some_number라는 열을 생각해 보세요. 이 길이를 초과하는 숫자(예: 715988985123857)가 삽입되면 2147483647로 변환됩니다.

오버플로 메커니즘

MySQL 문서에 따르면 정수 오버플로는 계산 결과가 데이터 유형에 허용되는 최대 값을 초과할 때 발생합니다. 이 경우 10비트 정수의 최대값은 2147483647입니다.

계산 결과 수식

변환은 특정 수식을 따릅니다.

Result = Number % (2^Bits) - 1

여기서:

  • Number는 삽입되는 원래 숫자입니다
  • Bits는 대상 열의 비트 수입니다

이 예에서는 , 숫자는 715988985123857이고 비트는 10이므로 결과는 다음과 같습니다.

2147483647

BigInt 대 Int

정수 오버플로를 방지하려면 더 큰 정수에 대해 bigint 데이터 유형을 사용하세요. . BigInt는 최대 2^63-1의 값을 저장할 수 있으므로 잘림이나 변환 문제를 방지할 수 있습니다.

위 내용은 MySQL이 더 짧은 열에 삽입된 큰 정수를 변환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.