에러 코드 1292 - 잘린 DUBLE 값 - Mysql
무슨 오류인지 모르겠어요!
#1292 - Truncated incorrect DOUBLE value:
이중 값 필드나 데이터는 없습니다!
이걸 알아내느라 한 시간이나 허비했어!
여기 나의 질문이 있습니다.
INSERT INTO call_managment_system.contact_numbers
(account_id, contact_number, contact_extension, main_number, created_by)
SELECT
ac.account_id,
REPLACE(REPLACE(REPLACE(REPLACE(ta.phone_number, '-', ''), ' ', ''), ')', ''),'(','') AS Phone,
IFNULL(ta.ext, '') AS extention,
'1' AS MainNumber,
'2' AS created_by
FROM
cvsnumbers AS ta
INNER JOIN accounts AS ac ON ac.company_code = ta.company_code
WHERE
LENGTH(REPLACE(REPLACE(REPLACE(REPLACE(ta.phone_number, '-', ''), ' ', ''), ')', ''),'(','') ) = 10
여기 결과가 들어가는 테이블에 대한 내 show create 테이블이 있습니다.
CREATE TABLE `contact_numbers` (
`number_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`account_id` int(10) unsigned NOT NULL DEFAULT '0',
`person_id` int(11) NOT NULL DEFAULT '0',
`contact_number` char(15) NOT NULL,
`contact_extension` char(10) NOT NULL DEFAULT '',
`contact_type` enum('Primary','Direct','Cell','Fax','Home','Reception','Office','TollFree') NOT NULL DEFAULT 'Primary',
`contact_link` enum('Account','PDM','Other') NOT NULL DEFAULT 'Account',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0 = inactive, 1=active',
`main_number` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1 = main phone number',
`created_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`created_by` int(11) NOT NULL,
`modified_on` datetime DEFAULT NULL,
`modified_by` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`number_id`),
KEY `account_id` (`account_id`),
KEY `person_id` (`person_id`)
) ENGINE=InnoDB AUTO_INCREMENT=534 DEFAULT CHARSET=utf8
이 메시지는 숫자와 스트링을 비교하고 있음을 나타냅니다.WHERE
또는ON
절을 클릭합니다.당신의 질문에서, 그것이 발생할 수 있는 유일한 장소는ON ac.company_code = ta.company_code
; 두 선언이 유사한지 확인하거나 명시적인 선언을 사용합니다.CAST
번호를 문자열로 변환합니다.
끄면strict
이 에러는 경고로 바뀝니다.
쿼리에 구문 오류나 원치 않는 문자가 있어 수정했지만 MySQL은 이를 포착하지 못했습니다.사용하고 있었습니다.and
예를 들어 업데이트 중에 여러 필드 사이에 있습니다.
update user
set token='lamblala',
accessverion='dummy' and
key='somekey'
where user = 'myself'
위 쿼리의 문제는 대체하여 해결할 수 있습니다.and
콤마( )로 표시합니다.,
)
나도 같은 문제에 직면해 있었다.varchar(100) 열을 숫자 1과 비교하려고 합니다.1292 에러가 발생.1 주위에 작은 따옴표('1')를 추가하여 고정합니다.
위의 설명 감사합니다.
TL; DR
이 문제는 적용에 의해서도 발생할 수 있습니다.OR
열/리터럴을 문자열로 지정합니다.
풀 버전
단순하게 동일한 오류 메시지를 받았습니다.INSERT
뷰를 포함하는 문:
insert into t1 select * from v1
모든 소스 열과 대상 열이 유형이었지만VARCHAR
몇 가지 디버깅 후 근본 원인을 찾았습니다.뷰에는 다음과 같은 fragment가 포함되어 있습니다.
string_col1 OR '_' OR string_col2 OR '_' OR string_col3
이는 아마도 Oracle에서 다음 스니펫을 자동으로 변환한 결과일 것입니다.
string_col1 || '_' || string_col2 || '_' || string_col3
(||
Oracle에서는 문자열 연결입니다).해결 방법은
concat(string_col1, '_', string_col2, '_', string_col3)
대신.
이 에러가 발생하는 경우는 몇 가지 있습니다.
1. not equals 연산자를 사용한다.!=
에 있어서where
배수의 일람표가 있는 절or
가치
예를 들어 다음과 같습니다.
where columnName !=('A'||'B')
이 문제는 다음을 사용하여 해결할 수 있습니다.
where columnName not in ('A','B')
2. 비교 연산자가 누락되어 있다.if()
기능:
select if(col1,col1,col2);
값을 선택하기 위해col1
존재하는 경우 및 그 이외의 경우 값을 나타내는 경우col2
...이것에 의해 에러가 발생합니다.이 에러는, 다음의 방법으로 해결할 수 있습니다.
select if(col1!='',col1,col2);
이 에러가 발생했을 때, 버그라고 생각됩니다만, SELECT 문과 같은 WHERE 절을 사용해 다른 쿼리를 실행하면, 그 SELECT 로부터 프라이머리 ID 를 취득할 수 있는 것에 주의해 주세요.SELECT CONCAT(primary_id, ',')
실패한 에 WHERE 문에서 ID ]) 에 의해,의 ( 구에 하는 문제를 할 수 UPDATE WHERE [ primary _ id ]IN ( [ SELECT 문select(ID ] ) 。이것에 의해, 원래의 (실패한) 쿼리의 WHERE 구에 의해서 발생하는 문제를 경감할 수 있습니다.
개인적으로 WHERE ___IN ([values here])의 값에 대해 따옴표를 사용했을 때 300개의 예상 엔트리 중 10개만 영향을 받고 있었습니다.제 생각에는 버그인 것 같습니다.
내 경우 뷰(높이 중첩된 뷰, 뷰인뷰) 삽입으로 인해 mysql-5.6에서 오류가 발생했습니다.
CREATE TABLE tablename AS
SELECT * FROM highly_nested_viewname
;
이 문제를 해결하려면 구체화된 뷰(실제 표)를 시뮬레이션하고 저장 프로시저를 사용하여 정기적으로 삽입/갱신해야 했습니다.
및 에서 이 하였습니다.ES6의 "TypeORM"을하려고 할 때..where("order.id IN (:orders)", { orders })
서, snowledge.orders
는 쉼표로 구분된 숫자 문자열입니다.템플릿 리터럴로 변환했더니 문제가 해결되었습니다.
.where(`order.id IN (${orders})`);
문자열 필드 길이에 대해 테이블에서 CHECK RESTRAN을 사용한 경우
예: 사용자 이름 길이 > = 8을 확인하는 방법
용도:
CHECK (CHAR_LENGTH(username)>=8)
대신
CHECK (username>=8)
잘못된 데이터 유형 비교가 있는 경우 검사 제약 조건을 수정합니다.
이중 값 필드 또는 데이터가 없는 경우 sql strict 모드를 비활성화해야 합니다.
이를 수행하려면 MySQL 설치 폴더에 있는 "my.ini" 파일을 편집해야 합니다. "Set the SQL mode to strict" 행을 찾아 다음 행을 변경합니다.
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
이를 위해 "STRICT_TRANS_TABLES" 삭제
# Set the SQL mode to strict
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
그런 다음 MySQL 서비스를 다시 시작해야 이 변경 사항을 사용할 수 있습니다.
변경을 확인하려면 에디터를 열고 다음 SQL 문장을 실행합니다.
SHOW VARIABLES LIKE 'sql_mode';
매우 중요:저장 후 파일 형식에 주의하십시오.서비스가 재시작되지 않으므로 "UTF8"로 저장하고 "TFT8 with BOM"으로 저장하지 마십시오.
언급URL : https://stackoverflow.com/questions/16068993/error-code-1292-truncated-incorrect-double-value-mysql
'programing' 카테고리의 다른 글
크기 자동 조정을 사용하여 텍스트 영역 작성 (0) | 2022.12.11 |
---|---|
C write는 분명히 숫자를 쓰지 않는다. (0) | 2022.12.11 |
JUnit 테스트 주석을 사용하여 예외 메시지를 강조하려면 어떻게 해야 합니까? (0) | 2022.12.11 |
하위 구성 요소의 VueJs 호출 메서드 (0) | 2022.12.11 |
Eclipse 가져오기의 주요 바로 가기 (0) | 2022.12.11 |