Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySql.Data.MySqlClient.MySqlCommand.ExecuteReader के साथ DataColumn MaxLength समस्या

आपके द्वारा प्रदान किए गए लिंक में, यह स्पष्ट रूप से बताता है कि टेक्स्ट फ़ील्ड के लिए, "यदि मान में मल्टीबाइट वर्ण हैं तो प्रभावी अधिकतम लंबाई कम है। "

UTF-8 एक यूनिकोड वर्णसेट है, और आपके डेटाबेस के लिए डिफ़ॉल्ट है। यह पहले 128 वर्णों के लिए 1-बाइट प्रतिनिधित्व का उपयोग करता है, जो ASCII सेट से मेल खाता है, और शेष वर्णों के लिए 4-बाइट प्रतिनिधित्व करता है।

इसका मतलब यह है कि एक टेक्स्ट कॉलम में कम या ज्यादा वर्ण संग्रहीत हो सकते हैं, जो इस बात पर निर्भर करता है कि वर्ण ASCII हैं या नहीं।

अब, आपकी समस्या तब आती है जब MySQL ड्राइवर इसे ठीक से नहीं संभालता है, और मान लेगा कि सभी UTF-8 वर्ण 4 बाइट चौड़े हैं , और कॉलम की लंबाई को 4 बाइट्स से विभाजित करेगा और डेटाटेबल को वास्तविक फ़ील्ड लंबाई के रूप में पास करेगा। इसका मतलब है कि तकनीकी रूप से आपके डेटाबेस में कुछ टेक्स्ट होना संभव है जो डेटाटेबल में फिट नहीं होगा, जैसा कि आपके मामले में हुआ है।

आपकी समस्या का समाधान (या इस मामले में समाधान) ठीक वही है जो आपने अभी के लिए किया है, जो कॉलम को ऐसे प्रकार में बदल रहा है जिसमें अधिक वर्ण हो सकते हैं, जैसे कि MEDIUMTEXT या LONGTEXT।

मेरा अनुमान है कि यह निर्णय MySQL ड्राइवर के कार्यान्वयन को सरल बनाने के लिए किया गया था, लेकिन मैं Oracle को एक बग रिपोर्ट सबमिट करने पर विचार करूंगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल को बाएं जॉइन पर अधिकतम आईडी फ़ील्ड मिल रहा है

  2. MySQL चर स्तंभ नाम के साथ क्वेरी का चयन करें

  3. प्रत्येक पंक्ति के लिए MySQL ऑटो-स्टोर डेटाटाइम

  4. जावा MySQL टाइमस्टैम्प समय क्षेत्र की समस्याएं

  5. सम्मिलित डेटा phpmyadmin डेटाबेस में सहेज नहीं रहा था