MYSQL ভুল ডাবল মান ছাঁটাই করেছে


155

নীচের এসকিউএল কোয়েরি কার্যকর করা হয়:

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
এই ত্রুটি বার্তার আসল অর্থ কী এবং কোনও ক্ষেত্রে এটি প্রদর্শিত হয় তা কোনওভাবেই নির্ধারণযোগ্য? যেহেতু এটি প্রাসঙ্গিক ক্ষেত্রে ঘটে যেখানে ডাবল মান জড়িত না তাই এটি কিছুটা বিভ্রান্তিকর বলে মনে হয়।
সিক করুন

অনুমান করুন এটি AND এর আগে 'সেকোলুল XVI - XVIII' এর বুলিয়ান মান গণনা করার চেষ্টা করে।
আন্তন কলায়াভ

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
মূলত যখনই কোনও সিন্ট্যাক্সের সমস্যা থাকে তখন এটি এই অকেজো ব্যতিক্রমটিকে "
মাইএসকিএল

হ্যাঁ..আমিও 'যেখানে' তে স্ট্রিং আক্ষরিক ব্যবহার করার চেষ্টা করার সময় একটি উদ্ধৃতি ব্যবহার না করে একইরকম অভিজ্ঞতা পেয়েছি।
প্রণে

আমি এই কারণে আত্মহত্যা করতে চলেছিলাম। Godশ্বরের ধন্যবাদ আপনি আমার জীবন বাঁচিয়েছেন। এই বোকা এবং আপডেটে। 😠🤣
গৌরবমেহলা

72

আমি এই ব্যতিক্রমটি কৌমার পরিবর্তে এবং এর পরিবর্তে পাচ্ছিলাম না, আসলে আমি এই ব্যতিক্রমটি কেবলমাত্র এই কারণে করছি যে আমি যেখানে ক্লজটিতে অ্যাস্টোস্ট্রোফ ব্যবহার করছিলাম না।

আমার জিজ্ঞাসা মত ছিল

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

যখন আমি যেখানে ধারাটি পরিবর্তিত হয়েছি where column2 in ('00012121');তখন ক্যোরিটি আমার পক্ষে ভাল কাজ করেছে।


2
আমার জন্য একই সমস্যা! আমি কোনও সিআরএম-তে একটি টেবিল আপডেট করার চেষ্টা করছিলাম যা প্রশাসক ব্যবহারকারীর আইডি হিসাবে 1 এবং অন্য সমস্ত ব্যবহারকারীর জন্য 36 চর নির্দেশিকা ব্যবহার করে। আমার যেখানে উদ্ধৃতি ছাড়াই ইউজার_আইডিকে 1 হিসাবে নির্দিষ্ট করা হয়েছিল। আমি মনে করি এটি মাইএসকিএল সম্পর্কিত কঠোর মোডে থাকার সাথে সম্পর্কিত।
dmulvi

3
@दानি_মুলভিহিল আমি বিশ্বাস করি আপনি সঠিক পথে আছেন। আমার কাছে তা থাকত STRICT_TRANS_TABLESসেট sql_modeএবং একটি ক্ষেত্র সহ সীমাবদ্ধ (কি হতে হাজির) একটি সাংখ্যিক মান আপডেট করার প্রচেষ্টার whereএকটি ত্রুটি ছুড়ে ফেলে দফা। মোডগুলি পরিবর্তন করে, পরিবর্তে এটি একটি সতর্কতা ছুঁড়েছে, কিন্তু এখনও আপডেটটি প্রয়োগ করে না। কাছাকাছি পরিদর্শন করার পরে, যেখানে ক্লিজটি ব্যবহৃত হত, যেখানে পূর্ণসংখ্যার মান হিসাবে উপস্থিত ছিল তা সত্ত্বেও আসলে এটি ছিলvarchar(20)
রবার্ট গ্যানন

আমার জন্য একই সমস্যা। একটি 'টি থেকে নির্বাচন করুন যেখানে আইডি = 6503' ঠিক আছে but আইডি দেখতে পূর্ণসংখ্যার মতো তবে ভার্চার ছিল। আপডেটে মানটির উদ্ধৃতি দিয়ে সমস্যার সমাধান হয়েছে। এবং 'update টি একটি = "foo বিন্যাস" তে সেট যেখানে আইডি = "6503"'
gaoithe

একটি INSERT পাস করার সময় আমার জন্য একই সমস্যা যা মাইএসকিএল কনসোলে কাজ করছিল তবে পেন্টাহো ডেটা ইন্টিগ্রেশন সফ্টওয়্যারটিতে কাজ করছিল না। "নাম> 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

এটি মূলত যা হয়

এটি ভুল সিনট্যাক্স যার ফলে মাইএসকিউএলকে ভাবতে শুরু করে যে আপনি কোনও কলাম বা পরামিতি দিয়ে এমন কিছু করার চেষ্টা করছেন যা ভুল টাইপ "ডাবল" রয়েছে।

আমার ভুল থেকে শিখুন

আমার ক্ষেত্রে আমি ভেরচার কলামটি একটি টেবিল সেটিংয়ে আপডেট করেছি 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

দেখে মনে হচ্ছে মাইকিউএলএলটি নির্বাচিত স্টেটমেন্টগুলির সাথে কাস্টিং প্রকারটি পরিচালনা করে। শপ_আইডি ফিল্ডটি বারচর টাইপের তবে নির্বাচনের বিবৃতি কার্যকর হয়

select * from shops where shop_id = 26244317283;

তবে আপনি যখন ক্ষেত্রগুলি আপডেট করার চেষ্টা করবেন

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

এটি ত্রুটির সাথে ব্যর্থ হয়েছে ছাঁটাই করা ভুল ডাবল মান: '1t5hxq9'

ক্ষেত্রটি বর্ণের টাইপ নয়, কাজটি করতে ক্যোয়ারীটির জন্য আপনার "26244317283" এর উদ্ধৃতিতে দোকান_আইডি 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

বাইন্ডারাম ব্যবহার করার সময় এবং PDO :: PARAM_INT নির্দিষ্ট করে যেখানে আমি আসলে একটি স্ট্রিং দিয়ে যাচ্ছিলাম আমি এই ত্রুটিটি অনুভব করেছি। PDO :: PARAM_STR এ পরিবর্তন করে ত্রুটিটি ঠিক করা হয়েছে।


0

আমি যখন একটি WHERE EXIST করার চেষ্টা করলাম তখন আমি এই ত্রুটিটি অনুভব করেছি যেখানে সাব-বিভাগটি 2 টি কলামের সাথে মেলানো হয়েছিল যা আলাদা আলাদাভাবে ছিল different দুটি সারণীও ছিল আলাদা স্টোরেজ ইঞ্জিনের।

একটি কলাম ছিল একটি CHAR (90) এবং অন্যটি ছিল BIGINT (20)।

একটি টেবিল ছিল ইনোডিবি এবং অন্যটি ছিল স্মৃতি।

প্রশ্নের অংশ:

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

BIGINT থেকে CHAR এ এক কলামে কলামের ধরণ পরিবর্তন করা সমস্যার সমাধান করেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.