2009-02-25 2 views
38

पीडीओ एडाप्टर को सेट करने के लिए प्रत्येक बार जब मैं कनेक्ट करता हूं, ZendFramework में SET NAMES utf8 कैसे चलाएं। मैं एडाप्टर कॉन्फ़िगर डेटा को सहेजने के लिए एक आईएनआई फ़ाइल का उपयोग कर रहा हूं। मुझे वहां कौन सी प्रविष्टियां जोड़नी चाहिए?प्रत्येक बार जब मैं कनेक्ट करता हूं तो पीडीओ रन सेट नाम utf8 को कैसे बनाते हैं, ZendFramework

यदि यह स्पष्ट नहीं था, तो मैं अपने प्रोजेक्ट की config.ini फ़ाइल में ऐसा करने के लिए सही वाक्यविन्यास की तलाश कर रहा हूं, न कि PHP कोड में, क्योंकि मैं कॉन्फ़िगरेशन कोड के इस हिस्से को मानता हूं।

उत्तर

46

Itay,

एक बहुत अच्छा सवाल है। सौभाग्य से आप के लिए इस सवाल का जवाब बहुत सरल है:

database.params.driver_options.1002 = "SET NAMES utf8" 

1002 निरंतर पीडीओ का मूल्य है :: MYSQL_ATTR_INIT_COMMAND

आप निरंतर zend_db में config.ini

118

मेरी google-fu

$pdo = new PDO(
    'mysql:host=mysql.example.com;dbname=example_db', 
    "username", 
    "password", 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 

पहली हिट डर;)

+1

:-) मेरा google foo बेहतर है, पोस्ट करने से पहले यह पाया गया है, ऐसा कहना चाहिए था। मैं अपना प्रश्न परिशोधित करूंगा, मैं इसे config.ini में करने की कोशिश कर रहा हूं, न कि PHP कोड में। –

+1

उस निरंतर में बचने वाले स्लैश के साथ क्या हो रहा है? – Kzqai

+0

हां, सवाल पूछता है कि utf8 कैसे सेट करें। लेकिन मुझे लगता है कि अगर आप mysql का उपयोग कर रहे हैं तो आपको पूर्ण utf8 वर्ण सेट का समर्थन करने के लिए utf8mb4 का उपयोग करने पर विचार करना चाहिए। यदि आप utf8 का उपयोग करते हैं, तो आप अपने mysql को कॉन्फ़िगर करने के तरीके के आधार पर डेटा खो सकते हैं। – dminer

0

अपने बूटस्ट्रैप फ़ाइल में ...

$db = Zend_Db::factory($adapter, $config); 
$db->query("SET NAMES 'utf8'"); 

तो आप अपने रजिस्ट्री में इस उदाहरण को बचाने

Zend_Registry::set('db', $db); 
4

सिलसिले में उपयोग नहीं कर सकते आलसी है जिसका मतलब है कि यह पहली क्वेरी पर जुड़ता है। यदि आपके पास कोई स्थिर पृष्ठ नहीं है जिसमें कोई क्वेरी नहीं है, तो यह कभी भी कनेक्ट नहीं होगा - भले ही यह आपके बूटस्ट्रैप फ़ाइल में प्रारंभ हो।

तो चल रहा है:

$db->query("SET NAMES 'utf8'"); 

इतना स्मार्ट नहीं है। अपने समाधान के लिए dcaunt के लिए बड़ा धन्यवाद।

32

सिर्फ अपने config में रखते

database.params.charset = "utf8" 

या जेडएफ 1.11 के बाद इस resources.db.params.charset = utf8 है कि यह

+4

अब यह करने का सबसे अच्छा तरीका है :) –

+2

resources.db.params.charset = utf8 मेरे लिए काम किया –

3

सभी इस तरीकों shoud काम करते हैं, कुछ विशेष को छोड़कर के लिए काम करेगा परिस्थितियों। उदाहरण के लिए, यदि आप PHP मशीन पर स्थानीय रूप से वेब सर्वर चला रहे हैं तो php < 5.3.1 के साथ, केवल 'मैन्युअल' $ db-> क्वेरी ("सेट नाम 'utf8'"); आपकी वास्तविक क्वेरी काम करने से पहले। MYSQL_ATTR_INIT_COMMAND का उपयोग करने का प्रयास करने वाली कोई भी अन्य विधि विफल हो जाएगी।

यहाँ मैं आज सीखा है, यह बहुत ही समस्या के साथ संघर्ष कर रहा है:

  1. आप (, यानि कि मेरा विशेष रूप से मैं नहीं जानता) पीडीओ :: कुछ वातावरण में MYSQL_ATTR_INIT_COMMAND का उल्लेख नहीं कर सकते हैं।आपको स्पष्ट रूप से 1002 का उपयोग

  2. ज़ेंड फ्रेमवर्क 1.11 (शायद 1.8 के बाद से पुष्टि करने के लिए) के साथ, आपको अपनी कॉन्फ़िगरेशन में डेटाबेस.params.driver_options.1002 = "सेट नाम utf8" सेट करने की आवश्यकता नहीं है। ini: resource.db.params.charset = "utf8" आपके लिए यह करने के लिए Zend_Db_Adapter_Pdo_Mysql के लिए पर्याप्त होगा।

  3. विंडोज़ पर, आपको काम करने के लिए MYSQL_ATTR_INIT_COMMAND के लिए php> = 5.3.1 की आवश्यकता है।

  4. यदि आप अपने PHP संस्करण को 5.3.1 या उच्चतम के साथ प्रतिस्थापित करते हैं (मैंने 5.3.3 का भी परीक्षण किया है), तो आपको यह सुनिश्चित करना होगा कि आप अपने php.ini में pdo_mysql.default_socket पर एक मान निर्धारित करें। डिफ़ॉल्ट खाली मान काम नहीं करेगा (पुष्टि करने के लिए: मैंने इसके बारे में कुछ पढ़ा लेकिन बिंदु 5 के बारे में जानने के बाद इसके बिना प्रयास करने के लिए परेशान नहीं किया)

  5. आपको यह सुनिश्चित करने की भी आवश्यकता है कि आपके पास 127.0 है। अपने विंडोज़ में 0.1 स्थानीय होस्ट '\ system32 \ drivers \ etc \ मेजबान छिपा सिस्टम फ़ाइल

इसे ध्यान में सब के साथ

, आप से बचाने के लिए सक्षम होना चाहिए (कि php 5.3.0 के लिए एक समस्या नहीं था) अपने आप को गुगल करने का दिन और अपने कुछ बाल रखें! ;)

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

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