Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

오버플로를 처리할 때 NO_UNSIGNED_SUBTRACT SQL 모드의 용도는 무엇입니까?

<시간/>

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)