কলামের জন্য ডেটা কেটে গেছে?


90

ট্যালিও কল কল আইডিস (34 চর স্ট্রিং) সংরক্ষণ করার জন্য একটি মাইএসকিউএল কলামের ডেটা ধরণের পরিবর্তন করার পরে , আমি কলামটিতে ম্যানুয়ালি ডেটা পরিবর্তনের চেষ্টা করব:

update calls 
   set incoming_Cid='CA9321a83241035b4c3d3e7a4f7aa6970d' 
 where id='1';

তবে আমি একটি ত্রুটি পেয়েছি যা কলামের ডেটা টাইপটি যথাযথভাবে সংশোধন করা হয়েছে তা দেখার অর্থ হয় না?

| Level ||| Code | Message | Warning | 1265 | Data truncated for column 'incoming_Cid' at row 1


4
পরিবর্তনের পরে সঠিক ডেটাটাইপ কী?
জোছিম ইসাকসন

4
আপনি কি নিশ্চিত যে কলামটি সেই দৈর্ঘ্যের পাঠ্যের জন্য যথেষ্ট জায়গা নির্দিষ্ট করেছে?
জন কনডে

4
ALTER TABLES calls MODIFY incoming_Cid STRING;আমি কি করেছি।
জাগস্ট্রাগ

সম্পাদনার কারণে পূর্ববর্তী মন্তব্য মুছে ফেলা হয়েছে: আমি উল্লেখ করিনি যে স্ট্রিংটি চর (1) এর পরিবর্তে চার (34) হওয়া উচিত, তবে কীভাবে তা জানেন না
Zagstrug

STRINGকোনও মাইএসকিউএল টাইপ নয়। আপনার ডাটাবেস ইঞ্জিন কি?
এলোমেলো সৈয়দ

উত্তর:


83

আপনার সমস্যাটি হ'ল এই মুহুর্তে আপনার incoming_Cidকলামটি CHAR(1)কখন হওয়া উচিত হিসাবে সংজ্ঞায়িত হয়েছে CHAR(34)

এটি ঠিক করার জন্য আপনার কলামগুলির দৈর্ঘ্য 1 থেকে 34 করার জন্য এই আদেশটি জারি করুন

ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);

এখানে এসকিউএলফিডাল ডেমো রয়েছে


13

একটি টেবিল কলামের কারণে আমার একই সমস্যা ছিল যা ENUM ('x', 'y', 'z') হিসাবে সংজ্ঞায়িত হয়েছিল এবং পরে আমি এই কলামটিতে 'এ' মানটি সংরক্ষণ করার চেষ্টা করছিলাম, সুতরাং আমি উল্লিখিতটি পেয়েছি ত্রুটি.

টেবিল কলাম সংজ্ঞা পরিবর্তন করে এনাম সেটে মান 'এ' যুক্ত করে সমাধান করা।


8

এই বিবৃতি জারি করে:

ALTER TABLES call MODIFY incoming_Cid CHAR;

... আপনি দৈর্ঘ্যের প্যারামিটার বাদ দিয়েছেন। আপনার জিজ্ঞাসা তাই সমান ছিল:

ALTER TABLE calls MODIFY incoming_Cid CHAR(1);

আপনাকে অবশ্যই 1 এর চেয়ে বড় মাপের জন্য ক্ষেত্রের আকার নির্দিষ্ট করতে হবে

ALTER TABLE calls MODIFY incoming_Cid CHAR(34);

5

তবে আমি একটি ত্রুটি পেয়েছি যা কলামের ডেটা টাইপটি যথাযথভাবে সংশোধন করা হয়েছে তা দেখার অর্থ হয় না?

| Level | Code | Msg | Warn | 12 | Data truncated for column 'incoming_Cid' at row 1

আপনি নীচের মতো কিছু করার সময় আপনি প্রায়শই এই বার্তাটি পেতে পারেন:

REPLACE INTO table2 (SELECT * FROM table1);

নিম্নলিখিত ক্ষেত্রে আমাদের ক্ষেত্রে প্রতিক্রিয়া:

SQL Exception: Data truncated for column 'level' at row 1

সমস্যাটি কলাম বিভ্রান্তি হিসাবে পরিণত হয়েছিল যার ফলস্বরূপ tinyintকোনও datetimeক্ষেত্র বা তার বিপরীতে সংরক্ষণের চেষ্টা করা হয়েছিল ।


1

আমার ক্ষেত্রে এটি একটি ENUM সহ একটি টেবিল ছিল যা সপ্তাহের দিনগুলি পূর্ণসংখ্যার হিসাবে গ্রহণ করে (0 থেকে 6)। পূর্ণসংখ্যা হিসাবে 0 মানটি সন্নিবেশ করানোর সময় আমি ত্রুটি বার্তাটি পেয়েছি "কলামের জন্য ডেটা কাটা ..." তাই এটি ঠিক করার জন্য আমাকে একটি স্ট্রিংয়ের সাথে পূর্ণসংখ্যা কাস্ট করতে হয়েছিল। এর পরিবর্তে:

$item->day = 0;

আমার করতেই হতো;

$item->day = (string) 0;

এটি শূন্যকে castুকিয়ে দেওয়ার মতো নির্বোধ দেখাচ্ছে তবে আমার ক্ষেত্রে এটি লারাভেল কারখানায় ছিল এবং আমাকে এটি লিখতে হয়েছিল:

$factory->define(App\Schedule::class, function (Faker $faker) {
    return [
        'day' => (string) $faker->numberBetween(0, 6),
        //
    ];
});

1

যখন আমি প্রথমে সিএসভিতে মাইএসকিএলে আমদানি করার চেষ্টা করছিলাম তখন আমিও একই ত্রুটি পেয়েছি এবং তারপরে আমি তৈরি হওয়া মাইএসকিএল টেবিলটির সিসিভি ক্ষেত্রের আমদানির চরিত্রের দৈর্ঘ্য নেই, তাই যদি এটি প্রথমবারের মতো সিএসভি আমদানি করে তবে

  1. আরও চরিত্রের দৈর্ঘ্য দেওয়া ভাল ধারণা।
  2. সমস্ত ক্ষেত্র লেবেল হিসাবে varcharবা text, মিশ্রণ intবা অন্যান্য মান না।

তাহলে আপনি যেতে ভাল।


0

"এসইটি" টাইপযুক্ত একটি ডাটাবেস ক্ষেত্রের সাথে আমার একই সমস্যা ছিল যা এনাম টাইপ।

আমি একটি মান যুক্ত করার চেষ্টা করেছি যা সেই তালিকায় ছিল না।

আমি যে মানটি যুক্ত করার চেষ্টা করেছি তার দশমিক মান 256 ছিল, তবে এনাম তালিকায় কেবল 8 টি মান রয়েছে।

1: 1   -> A
2: 2   -> B
3: 4   -> C
4: 8   -> D
5: 16  -> E
6: 32  -> F
7: 64  -> G
8: 128 -> H

সুতরাং আমি শুধু ক্ষেত্রের অতিরিক্ত মান যোগ করতে হবে।

এখানে চিত্র বর্ণনা লিখুন

এই ডকুমেন্টেশন এন্ট্রি পড়া আমাকে সমস্যা বুঝতে সাহায্য করেছে।

মাইএসকিউএল প্রথম সেট সদস্যের সাথে সঞ্চিত মানের নিম্ন-অর্ডার বিটের সাথে SET মানগুলিকে সংখ্যাগতভাবে সঞ্চয় করে। যদি আপনি একটি সাংখ্যিক প্রসঙ্গে SET মান পুনরুদ্ধার করেন তবে প্রাপ্ত মানটি কলাম মানটি তৈরি করে এমন সেট সদস্যদের সাথে সম্পর্কিত বিট সেট করে। উদাহরণস্বরূপ, আপনি এটির মতো একটি এসইটি কলাম থেকে সংখ্যাগত মানগুলি পুনরুদ্ধার করতে পারেন:

mysql> SELECT set_col+0 FROM tbl_name; If a number is stored into a

যদি একটি নম্বর একটি এসইটি কলামে সঞ্চিত থাকে তবে সংখ্যার বাইনারি উপস্থাপনায় সেট বিটগুলি কলাম মানটিতে সেট সদস্যদের নির্ধারণ করে। SET ('a', 'b', 'c', 'd') হিসাবে নির্দিষ্ট কলামের জন্য সদস্যদের নিম্নলিখিত দশমিক এবং বাইনারি মান রয়েছে।

SET Member  Decimal Value   Binary Value
    'a'                1          0001
    'b'                2          0010
    'c'                4          0100
    'd'                8          1000

আপনি যদি এই কলামটিতে 9 এর মান নির্ধারণ করেন তবে এটি বাইনারিতে 1001, সুতরাং প্রথম এবং চতুর্থ এসইটি মান সদস্য 'ক' এবং 'ডি' নির্বাচিত হয় এবং ফলাফলটি মান 'এ, ডি' হয়।

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