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