मेरे पास PHP स्क्रिप्ट है जो MySQL डीबी में लेख सम्मिलित करती है। mysql में फ़ील्ड प्रकार टेक्स्ट है।
अब, जब मैं 32K से बड़ा लेख सम्मिलित करता हूं, तो इसे केवल 32K तक छोटा कर दिया जाता है। मुझे पता है कि mysql में टेक्स्ट का अधिकतम आकार 64K है।
पुनश्च: MySQL संस्करण 5.0.51a-24+lenny5
. है PHP संस्करण है: PHP 5.3.2-1ubuntu4.9
mysql: max_allowed_packet=16M
कोई विचार है कि mysql इसे क्यों काटता है या इसे कैसे ठीक करता है ??
** संपादित करें **
मेरा कैरेक्टर सेट utf8 है
इस क्षेत्र के हेक्स का चयन करके मुझे 65768 मिले, और जैसा कि आप जानते हैं कि प्रत्येक दो हेक्स अंक एक बाइट का प्रतिनिधित्व करते हैं, और इस प्रकार यहां वास्तविक आकार 65768/2 = 32884 है
mysql> select length(hex(body)), length(body) from articles where article_id=62727; +-------------------+--------------+ | length(hex(body)) | length(body) | +-------------------+--------------+ | 65768 | 32884 | +-------------------+--------------+
आपकी सहायता के लिए धन्यवाद
2 जवाब
प्रेषक: http://dev.mysql.com/doc /refman/5.0/hi/string-type-overview.html
65,535 (2 ^ 16 - 1) वर्णों की अधिकतम लंबाई वाला एक टेक्स्ट कॉलम। यदि मान में बहु-बाइट वर्ण हों तो प्रभावी अधिकतम लंबाई कम होती है।
तो 64k वर्णों की अधिकतम लंबाई केवल एएनएसआई जैसे वर्णसेट के साथ ही संभव है। UTF-8, उदाहरण के लिए, एक वर्ण को एन्कोड करने के लिए एक से अधिक बाइट का उपयोग करता है और इस प्रकार कम टेक्स्ट को 2^16 बाइट्स में संग्रहीत किया जा सकता है।
TEXT प्रकार की लंबाई 64k बाइट्स है और वर्ण नहीं हैं, इसलिए यदि आप प्रति वर्ण एक से अधिक बाइट का उपयोग करके वर्ण सेट का उपयोग करते हैं, तो यह त्रुटि हो सकती है।
आपके मामले में स्ट्रिंग को हमेशा 32k पर छोटा किया जाता है, ऐसा लगता है कि आप UTF-16 वर्ण सेट का उपयोग कर रहे हैं जिसके लिए प्रति वर्ण दो बाइट्स की आवश्यकता होती है।
आपके पास दो संभावनाएं हैं:
- सिंगल-बाइट कैरेक्टर सेट का उपयोग करें
- बड़े कॉलम प्रकार का उपयोग करें
संबंधित सवाल
नए सवाल
php
PHP एक व्यापक रूप से उपयोग किया जाता है, उच्च-स्तरीय, गतिशील, वस्तु-उन्मुख, और व्याख्या की गई स्क्रिप्टिंग भाषा मुख्य रूप से सर्वर-साइड वेब विकास के लिए डिज़ाइन की गई है। PHP भाषा के बारे में सवालों के लिए इस्तेमाल किया।