incorrect for error column mysql truncated mysql-error-1292

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.