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의 값을 저장할 수 있으므로 잘림이나 변환 문제를 방지할 수 있습니다.
위 내용은 MySQL이 더 짧은 열에 삽입된 큰 정수를 변환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!