मेरे पास 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 | 
+-------------------+--------------+

आपकी सहायता के लिए धन्यवाद

1
Alaa 9 मई 2011, 17:29

2 जवाब

सबसे बढ़िया उत्तर

प्रेषक: http://dev.mysql.com/doc /refman/5.0/hi/string-type-overview.html

65,535 (2 ^ 16 - 1) वर्णों की अधिकतम लंबाई वाला एक टेक्स्ट कॉलम। यदि मान में बहु-बाइट वर्ण हों तो प्रभावी अधिकतम लंबाई कम होती है।

तो 64k वर्णों की अधिकतम लंबाई केवल एएनएसआई जैसे वर्णसेट के साथ ही संभव है। UTF-8, उदाहरण के लिए, एक वर्ण को एन्कोड करने के लिए एक से अधिक बाइट का उपयोग करता है और इस प्रकार कम टेक्स्ट को 2^16 बाइट्स में संग्रहीत किया जा सकता है।

1
joe776 9 मई 2011, 17:45
1
UTF-8 एक वर्ण के लिए एक से अधिक बाइट का उपयोग हो सकता है, लेकिन यह एकल बाइट का भी उपयोग कर सकता है। ऐसा नहीं है कि "UTF-8 किसी भी वर्ण के लिए 1 बाइट से अधिक का उपयोग करता है"।
 – 
binaryLV
10 मई 2011, 10:37

TEXT प्रकार की लंबाई 64k बाइट्स है और वर्ण नहीं हैं, इसलिए यदि आप प्रति वर्ण एक से अधिक बाइट का उपयोग करके वर्ण सेट का उपयोग करते हैं, तो यह त्रुटि हो सकती है।

आपके मामले में स्ट्रिंग को हमेशा 32k पर छोटा किया जाता है, ऐसा लगता है कि आप UTF-16 वर्ण सेट का उपयोग कर रहे हैं जिसके लिए प्रति वर्ण दो बाइट्स की आवश्यकता होती है।

आपके पास दो संभावनाएं हैं:

  1. सिंगल-बाइट कैरेक्टर सेट का उपयोग करें
  2. बड़े कॉलम प्रकार का उपयोग करें
7
Danilo Tommasina 9 मई 2011, 17:40