[mysql] MYSQL 잘린 잘못된 DOUBLE 값

아래 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';