아래 SQL 쿼리가 실행될 때 :
UPDATE shop_category
SET name = 'Secolul XVI - XVIII'
AND name_eng = '16th to 18th centuries'
WHERE category_id = 4768
다음과 같은 오류가 발생합니다.
1292 - Truncated incorrect DOUBLE value: 'Secolul XVI - XVIII'
이 문제를 해결하는 방법?
shop_category
테이블 구조 :
category_id mediumint(8)
name varchar(250)
name_eng varchar(250)
답변
AND
키워드 가 필요하지 않습니다 . UPDATE 문의 올바른 구문은 다음과 같습니다 .
UPDATE
shop_category
SET
name = 'Secolul XVI - XVIII',
name_eng = '16th to 18th centuries'
WHERE
category_id = 4768
답변
쉼표 대신 AND가 아닌이 예외가 발생했습니다. 실제로 where 절에서 아포스트로피를 사용하지 않았기 때문에이 예외가 발생했습니다.
내 검색어처럼
update table set coulmn1='something' where column2 in (00012121);
where 절을 where column2 in ('00012121');
다음으로 변경 하면 쿼리가 제대로 작동했습니다.
답변
를 교체 시도 AND
와 함께,
UPDATE shop_category
SET name = 'Secolul XVI - XVIII', name_eng = '16th to 18th centuries'
WHERE category_id = 4768
UPDATE 구문 나타낸다 쉼표 세퍼레이터로서 사용되어야한다.
답변
기본적으로
잘못된 구문은 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!
나는 이것이 단순한 경고 이상이되었으므로 인용문을 잊어 버리는 것이 덜 위험합니다.
* 내부 비명 종료 *
답변
방금 시간을 낭비 하고이 오류가 발생하는 경우를 추가하고 싶었습니다.
SQL Error (1292): Truncated incorrect DOUBLE value: 'N0003'
테스트 데이터
CREATE TABLE `table1 ` (
`value1` VARCHAR(50) NOT NULL
);
INSERT INTO table1 (value1) VALUES ('N0003');
CREATE TABLE `table2 ` (
`value2` VARCHAR(50) NOT NULL
);
INSERT INTO table2 (value2)
SELECT value1
FROM table1
WHERE 1
ORDER BY value1+0
문제는 ORDER BY value1+0
유형 캐스팅입니다.
질문에 답하지는 않지만 Google 에서이 오류의 첫 번째 결과 이며이 오류가 나타나는 다른 예가 있어야합니다.
답변
주로 잘못된 쿼리 문자열이이 경고를 표시합니다.
INSTR
함수를 사용할 때 미묘한 구문 오류 (오른쪽 괄호가 잘못됨)로 인해 잘못되었습니다 .
INSERT INTO users (user_name) SELECT name FROM site_users WHERE
INSTR(status, 'active'>0);
옳은:
INSERT INTO users (user_name) SELECT name FROM site_users WHERE
INSTR(status, 'active')>0;
답변
mysql이 SELECT 문으로 형식 캐스팅을 정상적으로 처리하는 것 같습니다. shop_id 필드는 varchar 유형이지만 select 문이 작동합니다.
select * from shops where shop_id = 26244317283;
그러나 필드를 업데이트하려고 할 때
update stores set store_url = 'https://test-url.com' where shop_id = 26244317283;
잘못된 잘린 DOUBLE 값 오류 : ‘1t5hxq9’
필드가 varchar not int 유형이므로 쿼리가 작동하려면 shop_id 26244317283을 따옴표 ‘26244317283’로 넣어야합니다.
update stores set store_url = 'https://test-url.com' where shop_id = '26244317283';