2012-05-01 13 views
5

MySQL दस्तावेज़ कहता है कि 5.0 के बाद से, वर्चर्स लम्बाई वर्ण इकाइयों को संदर्भित करती है, बाइट्स नहीं। हालांकि, मैं हाल ही में एक ऐसे मुद्दे पर आया जहां मुझे वर्चर्स कॉलम में फिट होने वाले मानों को सम्मिलित करते समय डेटा चेतावनियों को छोटा कर दिया गया था।MySQL UTF8 वर्कर कॉलम आकार

मैं v5.1 में एक साधारण तालिका के साथ इस मुद्दे को दोहराया

mysql> show create table test\G 
*************************** 1. row *************************** 
Table: test 
Create Table: CREATE TABLE `test` (
    `string` varchar(10) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
1 row in set (0.00 sec) 

मैं तो UTF8 वर्ण की मात्रा भिन्न डाला एकाधिक 10 अक्षर मूल्यों

mysql> insert into test (string) values 
    -> ('abcdefghij'), 
    -> ('ãáéíçãáéíç'), 
    -> ('ãáéíç67890'), 
    -> ('éíç4567890'), 
    -> ('íç34567890'); 
Query OK, 5 rows affected, 4 warnings (0.06 sec) 
Records: 5 Duplicates: 0 Warnings: 4 

mysql> show warnings; 
+---------+------+---------------------------------------------+ 
| Level | Code | Message          | 
+---------+------+---------------------------------------------+ 
| Warning | 1265 | Data truncated for column 'string' at row 2 | 
| Warning | 1265 | Data truncated for column 'string' at row 3 | 
| Warning | 1265 | Data truncated for column 'string' at row 4 | 
| Warning | 1265 | Data truncated for column 'string' at row 5 | 
+---------+------+---------------------------------------------+ 

mysql> select * from test; 
+------------+ 
| string  | 
+------------+ 
| abcdefghij | 
| ãáéíç | 
| ãáéíç | 
| éíç4567 | 
| íç345678 | 
+------------+ 
5 rows in set (0.00 sec) 

मुझे लगता है कि यह पता चलता है कि वर्कर आकार अभी भी बाइट्स में परिभाषित किया गया है या कम से कम, चरित्र इकाइयों में सटीक नहीं है।

सवाल यह है कि, क्या मैं दस्तावेज़ीकरण को सही ढंग से समझ रहा हूं और क्या यह एक बग है? या क्या मैं दस्तावेज़ीकरण की गलत व्याख्या कर रहा हूं?

+1

यह नहीं कि यह आपको थोड़ी सी मदद करता है लेकिन [sqlfiddle] (http://sqlfiddle.com/#!2/829b8/2), जो 5.5.20 होने का दावा करता है, कोई इस मुद्दे को पीड़ित नहीं करता है। शायद यह एक बग था जिसे बाद में तय किया गया है (मैंने खोज की है, लेकिन एक बग रिपोर्ट नहीं मिली है)। – eggyal

+0

समान समस्या 5.5.1 9 में मौजूद है, इसलिए यह संस्करण तय किया जा सकता है। रिलीज नोट्स की एक जांच में वर्चर्स या यूटीएफ 8 – sreimer

उत्तर

7

यह सच है कि VARCHAR और CHAR आकार वर्णों में नहीं, बाइट्स पर विचार किए जाते हैं।

जब मैं अपना कनेक्शन वर्ण लैटिन 1 (सिंगल बाइट) पर सेट करता हूं तो मैं आपकी समस्या को फिर से बनाने में सक्षम था।

सुनिश्चित निम्न आदेश के साथ प्रविष्टि क्वेरी चलाने से पहले आप अपने कनेक्शन चरित्र UTF8 करने के लिए सेट सेट कि:

SET NAMES utf8 

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

आप अपने default client character set को बदलने पर विचार कर सकते हैं।

+0

का कोई उल्लेख नहीं दिखाया गया यह वास्तव में समस्या थी। अगर गलत चरित्र सेट का उपयोग किया गया तो मैं परिणामस्वरूप रिकॉर्ड गलत तरीके से प्रदर्शित करने की उम्मीद करता। – sreimer

संबंधित मुद्दे