कॉलम के लिए डेटा काट दिया गया?


90

ट्विलियो कॉल आईडी (34 चार तार) को संग्रहीत करने के लिए MySql कॉलम के डेटा प्रकार को बदलने के बाद , मैं उस कॉलम में डेटा को मैन्युअल रूप से बदलने का प्रयास करता हूं:

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

हालाँकि मुझे एक त्रुटि मिलती है, जो यह नहीं देखती है कि कॉलम के डेटा प्रकार को ठीक से संशोधित किया गया है?

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


2
संशोधन के बाद सटीक डेटाटाइप क्या है?
जोआचिम इस्कसन

3
क्या आप सुनिश्चित हैं कि स्तंभ ने उस लंबाई के पाठ के लिए पर्याप्त जगह निर्दिष्ट की है?
जॉन कोनडे

1
ALTER TABLES calls MODIFY incoming_Cid STRING;मैंने जो किया है।
ज़गस्त्रुग

EDIT के कारण पिछली टिप्पणी हटा दी गई: मैंने यह निर्दिष्ट नहीं किया है कि तार को char (1) के बजाय char (34) होना चाहिए, लेकिन पता नहीं कैसे
Zagstrug

STRINGएक MySQL प्रकार नहीं है। आपका डेटाबेस इंजन क्या है?
रैंडमसाइड

जवाबों:


83

आपकी समस्या यह है कि इस समय आपके incoming_Cidकॉलम को परिभाषित किया CHAR(1)जाना चाहिए कि यह कब होना चाहिए CHAR(34)

इसे ठीक करने के लिए अपने कॉलम की लंबाई को 1 से 34 तक बदलने के लिए बस यह आदेश जारी करें

ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);

यहाँ SQLFiddle डेमो है


13

टेबल कॉलम के कारण भी मुझे यही समस्या थी जिसे ENUM ('x', 'y', 'z') के रूप में परिभाषित किया गया था और बाद में मैं इस कॉलम में 'a' मान को सहेजने की कोशिश कर रहा था, इस प्रकार मैंने उल्लेख किया त्रुटि।

तालिका स्तंभ परिभाषा में परिवर्तन करके हल किया गया और मान को 'ए' में एनम सेट में जोड़ा गया।


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;

ऐसा लगता है कि शून्य को कास्ट करने के लिए मूर्खतापूर्ण है लेकिन मेरे मामले में यह एक लारवेल कारखाने में था, और मुझे इसे इस तरह लिखना था:

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

1

जब मैंने पहली बार csv को mysql में आयात करने की कोशिश की, तो मुझे वही त्रुटि मिली, और फिर मुझे लगा कि मेरे द्वारा बनाई गई mysql तालिका में csv फ़ील्ड के आयात की लंबाई नहीं है, इसलिए यदि यह पहली बार csv आयात कर रहा है

  1. यह एक अच्छा विचार है कि अधिक चरित्र की लंबाई दी जाए।
  2. सभी फ़ील्ड्स को लेबल करें varcharया text, ब्लेंड intया अन्य मान न करें।

तब आप जाने के लिए अच्छे हैं।


0

मुझे एक ही समस्या थी, "SET" प्रकार के साथ एक डेटाबेस फ़ील्ड के साथ, जो एक एनुम प्रकार है।

मैंने एक मूल्य जोड़ने की कोशिश की जो उस सूची में नहीं था।

मैंने जो मान जोड़ने का प्रयास किया, उसमें दशमलव मान 256 था, लेकिन enum सूची में केवल 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

इसलिए मुझे सिर्फ क्षेत्र में अतिरिक्त मूल्य जोड़ना पड़ा।

यहाँ छवि विवरण दर्ज करें

इस प्रलेखन प्रविष्टि को पढ़ने से मुझे समस्या को समझने में मदद मिली।

MySQL, SET मानों को संख्यानुसार संग्रहीत करता है, पहले सेट सदस्य के अनुरूप संग्रहीत मूल्य के कम-क्रम बिट के साथ। यदि आप संख्यात्मक संदर्भ में SET मान प्राप्त करते हैं, तो पुनर्प्राप्त किया गया मान स्तंभ मान सेट करने वाले सेट सदस्यों के लिए बिट सेट है। उदाहरण के लिए, आप इस तरह से एक SET कॉलम से संख्यात्मक मान प्राप्त कर सकते हैं:

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

यदि किसी संख्या को SET स्तंभ में संग्रहीत किया जाता है, तो संख्या के द्विआधारी प्रतिनिधित्व में सेट किए गए बिट्स स्तंभ मान में सेट सदस्यों को निर्धारित करते हैं। 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 है, इसलिए पहले और चौथे SET मान के सदस्य 'a' और 'd' चुने गए हैं और परिणामी मान 'a, d' है।

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