Foutcode 1292 – Afgekapte onjuiste DUBBELE waarde – Mysql

Ik weet niet zeker wat deze fout is!

#1292 - Truncated incorrect DOUBLE value: 

Ik heb geen veld of gegevens met dubbele waarde!

Ik heb een heel uur verspild om dit uit te zoeken!

hier is mijn vraag

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

hier is mijn showtabel voor de tabel waar de resultaten naar toe gaan

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

Antwoord 1, autoriteit 100%

Dit bericht betekent dat je een getal en een tekenreeks probeert te vergelijken in een where– of ON-clausule. In uw zoekopdracht is de enige mogelijke plaats waar dat zou kunnen gebeuren ON ac.company_code = ta.company_code; zorg ervoor dat ze vergelijkbare verklaringen hebben, of gebruik een expliciete CASTom het getal naar een tekenreeks te converteren.

Als je de strictmodus uitschakelt, zou de fout in een waarschuwing moeten veranderen.


Antwoord 2, autoriteit 16%

Ik heb deze fout gecorrigeerd omdat er een syntaxisfout was of een aantal ongewenste tekens in de query, maar MySQL kon deze niet opvangen. Ik gebruikte andtussen meerdere velden tijdens de update, b.v.

update user 
set token='lamblala', 
    accessverion='dummy' and 
    key='somekey' 
where user = 'myself'

Het probleem in bovenstaande zoekopdracht kan worden opgelost door andte vervangen door komma(,)


Antwoord 3, autoriteit 6%

Ik had hetzelfde probleem. Proberen een varchar(100)-kolom te vergelijken met numeriek 1. Resulteerde in de 1292-fout. Opgelost door enkele aanhalingstekens rond 1 (‘1’) toe te voegen.

Bedankt voor de uitleg hierboven


Antwoord 4, autoriteit 2%

TL; DR

Dit kan ook worden veroorzaakt door ORtoe te passen op tekenreekskolommen/literalen.

Volledige versie

Ik kreeg dezelfde foutmelding voor een eenvoudige INSERT-instructie met een view:

insert into t1 select * from v1

hoewel alle bron- en doelkolommen van het type VARCHARwaren. Na wat debuggen vond ik de oorzaak; de weergave bevatte dit fragment:

string_col1 OR '_' OR string_col2 OR '_' OR string_col3

wat vermoedelijk het resultaat was van een automatische conversie van het volgende fragment uit Oracle:

string_col1 || '_' || string_col2 || '_' || string_col3

(||is tekenreeksaaneenschakeling in Oracle). De oplossing was om

concat(string_col1, '_', string_col2, '_', string_col3)

in plaats daarvan.


Antwoord 5

Ik heb een aantal gevallen gezien waarin deze fout optreedt:

1. gebruik de niet gelijk aan operator !=in een where-clausule met een lijst met meerdere OR-waarden

zoals:

where columnName !=('A'||'B')

Dit kan worden opgelost met

where columnName not in ('A','B')

2. een vergelijkingsoperator ontbreekt in een functie if():

select if(col1,col1,col2);

om de waarde in col1te selecteren als deze bestaat en anders de waarde in col2weer te geven…dit geeft de fout; het kan worden opgelost met:

select if(col1!='',col1,col2);

Antwoord 6

Toen ik deze fout ontving, geloof ik dat het een bug was, maar u moet er rekening mee houden dat als u een afzonderlijke query uitvoert met een SELECT-instructie en dezelfde WHERE-clausule, u de primaire ID’s uit die SELECT kunt halen: SELECT CONCAT(primary_id, ',')) statement en voeg ze toe aan de mislukte UPDATE-query met voorwaarden -> “WHERE [primary_id] IN ([lijst met door komma’s gescheiden primaire ID’s van de SELECT-instructie)” waarmee u problemen kunt oplossen die worden veroorzaakt door de WHERE-clausule van de oorspronkelijke (mislukte) query.

Voor mij persoonlijk, toen ik aanhalingstekens gebruikte voor de waarden in de “WHERE ____ IN ([waarden hier])”, werden slechts 10 van de 300 verwachte vermeldingen beïnvloed, wat naar mijn mening op een bug lijkt .


Antwoord 7

In mijn geval was het een weergave (in hoge mate genest, weergave in weergave) die de fout veroorzaakte in mysql-5.6:

CREATE TABLE tablename AS
  SELECT * FROM highly_nested_viewname
;

De tijdelijke oplossing die we uiteindelijk deden, was het simuleren van een gematerialiseerde weergave (wat in feite een tabel is) en deze periodiek in te voegen/bij te werken met behulp van opgeslagen procedures.


Antwoord 8

Had dit probleem met ES6 en TypeORM tijdens het doorgeven van .where("order.id IN (:orders)", { orders }), waar orderswas een door komma’s gescheiden reeks getallen. Toen ik converteerde naar een letterlijke sjabloon, was het probleem opgelost.

.where(`order.id IN (${orders})`);

Antwoord 9

Als u Controleer de Constraint op Tabel voor String Field-lengte

hebt gebruikt

E.G: om gebruikersnaam lengte en gt; = 8

te controleren

Gebruik:

CHECK (CHAR_LENGTH(username)>=8)

in plaats van

CHECK (username>=8)

Bevestig de controlebeperking als iemand een verkeerde datatype-vergelijking heeft


Antwoord 10

Als u geen dubbele veld of gegevens hebt, moet u misschien proberen SQL Strict-modus uit te schakelen.

Om dat te doen, moet u “My.ini ” -bestand in MySQL-installatiemap vinden, zoek “Stel de SQL-modus in op strikte” LINE en wijzig de onderstaande regel:

# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Hiertoe, verwijder “strikte_trans_tables”

# Set the SQL mode to strict
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Daarna moet je MySQL Service opnieuw opstarten om deze wijziging in te schakelen.

Om de wijziging te controleren, opent u de editor en voer deze SQL-zin uit:

SHOW VARIABLES LIKE 'sql_mode';

zeer belangrijk : wees voorzichtig met het bestandsformaat na opslaan. Sla het op als “UTF8” en niet als “TFT8 met BOM” omdat de service niet opnieuw opstart.

Other episodes