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 CAST
om het getal naar een tekenreeks te converteren.
Als je de strict
modus 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 and
tussen 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 and
te 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 OR
toe 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 VARCHAR
waren. 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 col1
te selecteren als deze bestaat en anders de waarde in col2
weer 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 orders
was 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.