"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > MySQL이 더 짧은 열에 삽입된 큰 정수를 변환하는 이유는 무엇입니까?

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

2024년 11월 13일에 게시됨
검색:976

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

여기서:

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

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

2147483647

BigInt 대 Int

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

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3