2008-11-04 5 views
7

मुझे एक php-gtk ऐप के साथ एक छोटी सी समस्या है जो गैर-utf8 तारों में चलती रहती है, मुझे पता चला कि समस्या डेटाबेस कनेक्शन में है, भले ही डेटाबेस UTF-8 में होना चाहिए।PHP में पीडीओ/SQLite कनेक्शन के वर्ण एन्कोडिंग को कैसे बदलें?

मैंने "सेट वर्णक सेट utf8" (MySQL मार्ग) और "सेट नाम यूटीएफ 8" के साथ प्रयास किया था और कुछ भी नहीं हुआ (इस संदेश में से कोई भी "Query Language Understood by SQLite " पृष्ठ में कोई भी जानकारी नहीं है, इसलिए मैं इसके बारे में आश्चर्यचकित नहीं हूं)।

पीडी: शायद कनेक्शन पहले से ही यूटीएफ -8 में है और डेटा नहीं है, लेकिन अगर कनेक्शन एन्कोडिंग को बदलने का कोई तरीका है तो यह प्रश्न अभी भी उपयोगी होगा।

उत्तर

8

जहाँ तक मैं कह सकता हूं, SQLite only has one setting for charset, जो प्रति-डेटाबेस स्तर पर है। आप कनेक्शन पर एन्कोडिंग नहीं बदल सकते हैं।

सी एपीआई में यूटीएफ -8 या यूटीएफ -16 के रूप में कनेक्शन खोलने के two different ways है। मैं यूटीएफ -8 संस्करण का उपयोग करने के लिए PHP के SQLite मॉड्यूल (और इस प्रकार पीडीओ) की अपेक्षा करता हूं। यदि यह सही है, तो मैं उम्मीद करता हूं कि एक SQLite कनेक्शन हमेशा यूटीएफ -8 है। इसका मतलब है कि आपको utf8_encode/utf8_decode के साथ तारों को मैन्युअल रूप से एन्कोड/डीकोड करना चाहिए।

यह भी देखें: http://www.alberton.info/dbms_charset_settings_explained.html

+2

मुझे पता चला था कि "SQLite विशेष पाठ यह प्राप्त करता है के बारे में नहीं है और पाठ स्ट्रिंग्स कि सामान्यीकृत या यहाँ तक कि अच्छी तरह से गठित UTF-8 नहीं हैं पर कार्रवाई करने के लिए खुश से अधिक है प्रोग्रामर जो चाहते हैं। IS08859 डेटा स्टोर करने के लिए ... "तो पाठ मूल रूप से आईएसओ 85 (कुछ) – levhita

+1

में था, मैंने आपकी सलाह का पालन किया और कुछ यूटीएफ 8_एनकोड्स (ओओपी के लिए प्रोग्रामिंग देवताओं का धन्यवाद) जोड़ा ताकि सब कुछ शुरुआत से utf8 हो। मेरा मुख्य डेटाबेस यूटीएफ 8 में बनाया गया है, और मैंने अभी कुछ प्लगइन डेटाबेस के साथ अपने सिस्टम को जोड़े जाने के लिए उन पंक्तियों को जोड़ा है। – levhita

+2

उस स्थिति में, आपको डेटा वापस पुनर्प्राप्त करते समय utf8_decode का उपयोग करना होगा। यह केवल तभी जरूरी है, यदि आप आंतरिक रूप से PHP के डिफ़ॉल्ट वर्णसेट (आईएसओ -885 9 -1) का उपयोग करते हैं। अपने सिस्टम के माध्यम से यूटीएफ -8 का उपयोग करने पर विचार करें, इस मामले में आपको कुछ भी एन्कोड करने की आवश्यकता नहीं है (हां, यह भ्रमित है)। – troelskn

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