MYSQL गलत गलत मान को काट दिया गया


155

जब नीचे SQL क्वेरी निष्पादित होती है:

UPDATE shop_category 
SET name = 'Secolul XVI - XVIII' 
    AND name_eng = '16th to 18th centuries' 
WHERE category_id = 4768

निम्नलिखित त्रुटि उठाई गई है:

1292 - Truncated incorrect DOUBLE value: 'Secolul XVI - XVIII'

इसे कैसे ठीक करें?


shop_category तालिका संरचना:

category_id   mediumint(8)
name        varchar(250)
name_eng      varchar(250)

1
क्या यह किसी भी तरह से निर्धारित किया जा सकता है कि इस त्रुटि संदेश का वास्तविक अर्थ क्या है और यह किन मामलों में दिखाई देता है? चूँकि यह उन संदर्भों में होता है जहाँ एक DOUBLE मान शामिल नहीं है, यह कुछ भ्रामक लगता है।
मर्क

अनुमान करें कि यह ANDOL से पहले 'Secolul XVI - XVIII' के BOOLEAN मान की गणना करने की कोशिश करता है।
एंटोन कोलयव

1
यदि आपके पास "जहां x = 'x' और y" है, तो आपको यह खराब कल्पना और अस्पष्ट त्रुटि
मिलेगी

जवाबों:


214

आपको ANDकीवर्ड की आवश्यकता नहीं है । यहाँ अद्यतन कथन का सही सिंटैक्स है :

UPDATE 
    shop_category 
SET 
    name = 'Secolul XVI - XVIII', 
    name_eng = '16th to 18th centuries' 
WHERE 
    category_id = 4768

12
वास्तव में खुशी हुई कि मुझे यह उत्तर कंप्यूटर से दीवार में फेंकने से पहले मिला
rbennell

19
निश्चित रूप से मेरे जैसे लोगों की ओर से मूर्खता उस गलती को बना रही है, हालांकि, 'गलत गलत मान' 'बहुत बेकार चेतावनी संदेश है ...
rbennell

6
मूल रूप से जब भी कुछ सिंटेक्स मुद्दा होता है, तो यह बेकार अपवाद "mysql-truncated-
wrong

हां..मुझे भी कुछ ऐसा ही अनुभव था, जिसमें बिना उद्धरणों का उपयोग किए cl क्लॉज ’में एक स्ट्रिंग शाब्दिक का उपयोग करने की कोशिश की गई थी।
प्रणय

मैं इस वजह से आत्महत्या करने वाला था। भगवान का शुक्र है कि तुमने मेरी जान बचाई। यह बेवकूफ और अद्यतन में। Av
गौरवमेला

72

मुझे यह अपवाद कॉमा की वजह से नहीं मिल रहा था, वास्तव में मैं यह अपवाद सिर्फ इसलिए कर रहा था क्योंकि मैं क्लॉस्ट में एपोस्ट्रोफिस का उपयोग नहीं कर रहा था।

जैसे मेरा प्रश्न था

update table set coulmn1='something' where column2 in (00012121);

जब मैं बदल गया, जहां खंड where column2 in ('00012121');तो मेरे लिए ठीक काम किया।


2
मेरे लिए एक ही मुद्दा! मैं एक crm में एक तालिका को अद्यतन करने की कोशिश कर रहा था जो कि व्यवस्थापक उपयोगकर्ता के उपयोगकर्ता आईडी के रूप में 1 का उपयोग करता है और अन्य सभी उपयोगकर्ताओं के लिए 36 char guids। मेरा कहां उद्धरण के बिना user_id को 1 के रूप में निर्दिष्ट कर रहा था। मुझे लगता है कि यह mysql के सख्त मोड में होने से संबंधित है।
dmulvi

3
@danny_mulvihill मेरा मानना ​​है कि आप सही रास्ते पर हैं। मैंने STRICT_TRANS_TABLESसेट किया था sql_modeऔर whereक्लाज में एक संख्यात्मक मान के साथ सीमित क्षेत्र (जो दिखाई दिया था) को अपडेट करने का प्रयास करने में त्रुटि हुई। मोड बदलते हुए, इसने इसके बजाय चेतावनी फेंक दी, लेकिन फिर भी अपडेट लागू नहीं किया। घनिष्ठ निरीक्षण करने पर, स्तंभ, जहां खंड में प्रयुक्त होता है, केवल पूर्णांक मान प्रतीत होने के बावजूद, वास्तव में एक थाvarchar(20)
रॉबर्ट गैनन

मेरे लिए भी यही मुद्दा है। एक 'सेलेक्ट * टी से जहाँ आईडी = 6503' ने ठीक काम किया, लेकिन 'अपडेट टी सेट ए = "फू" जहाँ आईडी = 6503' के परिणामस्वरूप ERROR 1292 (22007): गलत तरीके से गलत मान: '233805557438 #'। आईडी पूर्णांक की तरह दिखता है, लेकिन एक varchar था। अद्यतन में मूल्य का हवाला देते हुए समस्या को हल किया। 'अपडेट टी सेट ए = "फू" जहां आईडी = "६५०३" "
२१:३३ पर गॉथे

INSERT पास करते समय मेरे लिए भी यही समस्या जो mysql कंसोल में काम कर रही थी लेकिन Pentaho डेटा इंटीग्रेशन सॉफ्टवेयर में काम नहीं कर रही थी। "नाम> 1000 और नाम <6000" को "नाम> '1000' और नाम <'6000' में बदल दिया और एक आकर्षण की तरह काम किया।
सवा

13

के ANDसाथ बदलने की कोशिश करें,

UPDATE shop_category 
SET name = 'Secolul XVI - XVIII', name_eng = '16th to 18th centuries' 
WHERE category_id = 4768

अद्यतन सिंटेक्स शो अल्पविराम विभाजक के रूप में इस्तेमाल किया जाना चाहिए।


1
मेरे लिए +1 के लिए काम किया :)
फैसल

12

यह मूल रूप से क्या है

यह गलत सिंटैक्स है जिसके कारण MySQL को लगता है कि आप एक कॉलम या पैरामीटर के साथ कुछ करने की कोशिश कर रहे हैं जिसमें गलत प्रकार "DOUBLE" है।

मेरी गलती से सीखो

मेरे मामले में मैंने एक तालिका सेटिंग में varchar कॉलम को अपडेट किया NULLजहां मूल्य 0खड़ा था। मेरी अपडेट क्वेरी इस प्रकार थी:

UPDATE myTable SET myValue = NULL WHERE myValue = 0;

अब, के वास्तविक प्रकार के बाद से myValueहै VARCHAR(255)यह चेतावनी देता है:

+---------+------+-----------------------------------------------+
| Level   | Code | Message                                       |
+---------+------+-----------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'value xyz' |
+---------+------+-----------------------------------------------+

और अब myTableव्यावहारिक रूप से खाली है, क्योंकि myValueअब NULLतालिका में हर जगह के लिए है! ये कैसे हुआ?
* आंतरिक चिल्ला *

30k से अधिक पंक्तियों में अब लापता डेटा है।
* आंतरिक चिल्ला * तेज

बैकअप के लिए धन्यवाद। मैं सभी डेटा को पुनर्प्राप्त करने में सक्षम था।
* आंतरिक चिल्ला तीव्रता तीव्रता कम *

सही क्वेरी निम्नानुसार है:

UPDATE myTable SET myValue = NULL WHERE myValue = '0';
                                                  ^^^
                                                  Quotation here!

मैं चाहता हूं कि यह सिर्फ एक चेतावनी से अधिक था इसलिए उन उद्धरणों को भूलना कम खतरनाक है।

* अंत में आंतरिक चीखना *


1
आप चेतावनियों पर विफल होने का विकल्प सेट कर सकते हैं - देखें stackoverflow.com/a/4289242/1488762
रोजर ड्यूक

5

मैंने अभी इस पर अपना समय बर्बाद किया है और एक अतिरिक्त मामला जोड़ना चाहता हूं जहां यह त्रुटि खुद को प्रस्तुत करती है।

SQL Error (1292): Truncated incorrect DOUBLE value: 'N0003'

परीक्षण डेटा

CREATE TABLE `table1 ` (
    `value1` VARCHAR(50) NOT NULL 
);
INSERT INTO table1 (value1) VALUES ('N0003');

CREATE TABLE `table2 ` (
    `value2` VARCHAR(50) NOT NULL 
);

INSERT INTO table2 (value2)
SELECT value1
FROM table1
WHERE 1
ORDER BY value1+0

यह समस्या है ORDER BY value1+0 - टाइप कास्टिंग।

मुझे पता है कि यह सवाल का जवाब नहीं देता है लेकिन इस त्रुटि के लिए Google पर यह पहला परिणाम है और इसके अन्य उदाहरण होने चाहिए जहां यह त्रुटि स्वयं प्रस्तुत करती है।


4

मुख्य रूप से अमान्य क्वेरी स्ट्रिंग्स इस चेतावनी को देंगे।

INSTRफ़ंक्शन का उपयोग करते समय एक सूक्ष्म वाक्यविन्यास त्रुटि (गलत सही कोष्ठक) के कारण गलत :

INSERT INTO users (user_name) SELECT name FROM site_users WHERE
INSTR(status, 'active'>0);

सही बात:

INSERT INTO users (user_name) SELECT name FROM site_users WHERE
INSTR(status, 'active')>0;

2

ऐसा लगता है कि mysql सिलेक्ट स्टेटमेंट के साथ ग्रेसफुल टाइपिंग को हैंडल करता है। Shop_id फ़ील्ड प्रकार का varchar है, लेकिन चुनिंदा कथन काम करता है

select * from shops where shop_id = 26244317283;

लेकिन जब आप फ़ील्ड अपडेट करने का प्रयास करते हैं

update stores set store_url = 'https://test-url.com' where shop_id = 26244317283;

यह त्रुटि के साथ विफल हुआ गलत गलत मान: '1t5hxq9'

आपको फ़ील्ड के लिए काम करने के लिए '26244317283' उद्धरणों में shop_id 26244317283 डालना होगा क्योंकि फ़ील्ड प्रकार का नहीं है

update stores set store_url = 'https://test-url.com' where shop_id = '26244317283';

0

यदि आप इस समस्या को उस प्रविष्टि के साथ प्राप्त कर रहे हैं जो नीचे एक जैसी दिखती है, तो समस्या केवल --पाठ और टिप्पणी पाठ के बीच की जगह की कमी हो सकती है :

insert into myTable (a, b, c)
values (
   123 --something
  ,345 --something else
  ,567 --something something else
);

इसके साथ समस्या यह है कि --somethingवास्तव -- somethingमें एक स्थान के साथ होना चाहिए ।


0

BindParam का उपयोग करते समय मुझे इस त्रुटि का अनुभव हुआ, और PDO :: PARAM_INT को निर्दिष्ट करते हुए मैं वास्तव में एक स्ट्रिंग से गुजर रहा था। PDO में परिवर्तन :: PARAM_STR ने त्रुटि को ठीक किया।


0

मुझे इस त्रुटि का अनुभव तब हुआ जब मैंने WHERE EXIST करने की कोशिश की जहां उपशम 2 कॉलमों का मिलान किया जो कि अलग-अलग प्रकार के थे। दो टेबल भी अलग-अलग स्टोरेज इंजन थे।

एक कॉलम एक CHAR (90) और दूसरा एक BIGINT (20) था।

एक टेबल InnoDB थी और दूसरी मेमोरी थी।

क्वेरी का हिस्सा:

[...] AND EXISTS (select objectid from temp_objectids where temp_objectids.objectid = items_raw.objectid );

BIGINT से CHAR तक के एक कॉलम पर कॉलम प्रकार बदलने से समस्या हल हो गई।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.