SQL 엄격 모드가 활성화된 경우, 하나가 UNSIGNED 유형인 정수 값 사이의 빼기는 기본적으로 부호 없는 결과를 생성합니다. 그러나 결과가 음수이면 MySQL은 오류를 생성합니다. 다음 예에서 관찰할 수 있습니다 -
mysql> SET sql_mode = ''; Query OK, 0 rows affected (0.00 sec) mysql> Select CAST(0 AS UNSIGNED) -1; ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(cast(0 as unsigned) - 1)'
위 쿼리 이후의 에러는 수치 연산식 이후의 오버플로임을 보여줍니다.
이제 NO_UNSIGNED_SUBTRACTION SQL 모드를 활성화하여 처리할 수 있습니다. 이 모드를 활성화하면 결과는 오류 대신 -1이 됩니다.
mysql> Set sql_mode = 'NO_UNSIGNED_SUBTRACTION'; Query OK, 0 rows affected (0.00 sec) mysql> Select CAST(0 AS UNSIGNED) -1; +------------------------+ | CAST(0 AS UNSIGNED) -1 | +------------------------+ | -1 | +------------------------+ 1 row in set (0.00 sec)