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

MySQL은 범위를 벗어난 숫자 값을 어떻게 처리합니까?

<시간/>

컬럼 데이터 유형의 허용 범위를 벗어난 MySQL 숫자 값의 처리는 다음과 같은 방식으로 SQL 모드에 따라 다릅니다. -

(A) SQL 엄격 모드 사용 - 엄격한 SQL 모드가 활성화되면 MySQL은 범위 입력 값을 입력할 때 오류를 반환합니다. 이 경우 일부 또는 모든 값의 삽입에 실패했습니다.

예를 들어 열에 대한 데이터 유형으로 TINYINT 및 UNSIGNED TINYINT가 있는 두 개의 열이 있는 테이블을 만들었습니다.

mysql> 테이블 카운팅 생성(Range1 Tinyint, Range2 Tinyint Unsigned), 쿼리 OK, 영향을 받는 행 0개(0.14초)

이제 다음 명령을 사용하여 엄격한 SQL 모드를 활성화했습니다.

mysql> Set SQL_MODE ='traditional';Query OK, 영향을 받는 행 0개(0.00초)

이제 범위를 벗어난 값을 열에 삽입하려고 하면 MySQL은 오류를 반영하고 아래 쿼리로 확인할 수 있는 두 삽입이 모두 실패했습니다. -

mysql> Insert into Counting(Range1, Range2) Values(256,256);ERROR 1264 (22003):행 1mysql의 'Range1' 열에 대한 값 범위를 벗어남> Select * from counting;Empty set(0.00초) 

(B) SQL 엄격 모드 비활성화 - 제한적 SQL 모드가 비활성화되면 MySQL은 해당 열 데이터 유형의 적절한 끝점까지 값을 클리핑하고 결과 값을 누적합니다. MySQL은 클리핑으로 인해 발생하는 열 할당 변환의 결과인 경고를 반영합니다.

예를 들어, SQL 엄격 모드를 비활성화한 후 열에 값을 삽입하면 MySQL은 경고를 반영하고 적절한 끝점까지 트리밍한 후 값을 저장합니다. 아래 쿼리로 이해할 수 있습니다 -

mysql> SQL_MODE ='';Query OK, 0개의 열 영향(0.00초)mysql> Insert Into Counting(Range1,Range2) 값(256,256);Query OK, 1개 영향, 2개의 경고(0.02초) mysql> 경고 표시,+---------+------+---------------------------- ----------------------+| 레벨 | 코드 | 메시지 |+---------+------+------------------------------ -------------------+| 경고 | 1264 | 행 1에 있는 'Range1' 열의 값이 범위를 벗어났습니다 || 경고 | 1264 | 1행의 'Range2' 열 값이 범위를 벗어났습니다. |+---------+---+------- ---------------------------+2행 세트(0.00초)mysql> 계산에서 * 선택,+--- -----+--------+| 범위1 | 범위2 |+--------+--------+| 127 | 255 |+--------+--------+1 행 세트(0.00초)