for - Código de error 1292-Valor DOBLE incorrecto truncado-Mysql
error 1292 en mysql (5)
Corregí este error ya que había un error de sintaxis o algunos caracteres no deseados en la consulta, pero MySQL no pudo detectarlo. Estaba usando and
entre varios campos durante la actualización, por ejemplo
update user
set token=''lamblala'',
accessverion=''dummy'' and
key=''somekey''
where user = ''myself''
El problema en la consulta anterior se puede resolver reemplazando and
con una coma ( ,
)
No estoy seguro de qué es este error!
#1292 - Truncated incorrect DOUBLE value:
¡No tengo campos o datos de doble valor!
¡He perdido una hora tratando de resolver esto!
aquí está mi consulta
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
aquí está mi show create table para la tabla a la cual van los resultados
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
Cuando recibí este error, creo que era un error, sin embargo, debe tener en cuenta que si realiza una consulta por separado con una instrucción SELECT y la misma cláusula WHERE, puede obtener los ID principales de ese SELECT: SELECT CONCAT(primary_id, '','')
) y los inserta en la consulta UPDATE fallida con condiciones -> "WHERE [primary_id] IN ([lista de identificadores primarios separados por comas de la instrucción SELECT]" que le permite aliviar cualquier problema causado por la cláusula WHERE de la consulta original (fallida).
Para mí, personalmente, cuando estaba usando comillas para los valores en "DONDE ____ EN ([valores aquí])", solo se afectaron 10 de las 300 entradas esperadas, lo que, en mi opinión, parece un error.
Estaba enfrentando el mismo problema. Intentando comparar una columna varchar (100) con numérica 1. Resultó en el error 1292. Se corrigió añadiendo comillas simples alrededor de 1 (''1'').
Gracias por la explicación anterior
Este mensaje significa que estás tratando de comparar un número y una cadena en una cláusula WHERE
o ON
. En su consulta, el único lugar potencial donde podría estar ocurriendo es ON ac.company_code = ta.company_code
; o bien asegúrese de que tengan declaraciones similares, o use un CAST
explícito para convertir el número a una cadena.
Si desactivas el modo strict
, el error se convertirá en una advertencia.
TL; DR
Esto también puede deberse a la aplicación OR
a cadenas de columnas / literales.
Versión completa
Obtuve el mismo mensaje de error para una INSERT
simple que implica una vista:
insert into t1 select * from v1
aunque todas las columnas de origen y destino eran del tipo VARCHAR
. Después de algunas depuraciones, encontré la causa raíz; la vista contenía este fragmento:
string_col1 OR ''_'' OR string_col2 OR ''_'' OR string_col3
que presumiblemente fue el resultado de una conversión automática del siguiente fragmento de Oracle:
string_col1 || ''_'' || string_col2 || ''_'' || string_col3
( ||
es la concatenación de cadenas en Oracle). La solución fue usar
concat(string_col1, ''_'', string_col2, ''_'', string_col3)
en lugar.