기본적으로
잘못된 구문은 MySQL이 "DOUBLE"유형의 열 또는 매개 변수로 무언가를 시도한다고 생각하게합니다.
내 실수에서 배운다
필자의 경우 NULL
값이 0
서있는 테이블 설정 에서 varchar 열을 업데이트했습니다 . 내 업데이트 쿼리는 다음과 같습니다.
UPDATE myTable SET myValue = NULL WHERE myValue = 0;
지금의 실제 유형부터 myValue
이다 VARCHAR(255)
이 경고를 제공합니다 :
+---------+------+-----------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'value xyz' |
+---------+------+-----------------------------------------------+
그리고 지금 myTable
있기 때문에, 실질적으로 비어 myValue
지금 NULL
테이블의 모든 행에 대해! 어떻게 이런일이 일어 났습니까?
* 내부 비명 *
30k 개가 넘는 행에 데이터가 누락되었습니다.
* 내부 비명 강화
백업 주셔서 감사합니다. 모든 데이터를 복구 할 수있었습니다.
* 내부 비명 강도가 낮아짐 *
수정 된 쿼리는 다음과 같습니다.
UPDATE myTable SET myValue = NULL WHERE myValue = '0';
^^^
Quotation here!
나는 이것이 단순한 경고 이상이되었으므로 인용문을 잊어 버리는 것이 덜 위험합니다.
* 내부 비명 종료 *