यहाँ एक दो में एक उत्तर है।
आप इसे DSN में या MYSQL_ATTR_INIT_COMMAND (कनेक्शन विकल्प) के रूप में सेट कर सकते हैं।
मुझे लगता है कि डीएसएन बेहतर है।
$connect = new PDO(
"mysql:host=$host;dbname=$db;charset=utf8",
$user,
$pass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)
);
यदि आप UTF-8
specify निर्दिष्ट करते हैं आप utf8_general_ci
. के डिफ़ॉल्ट संयोजन के साथ काम कर रहे हैं , जब तक कि आपकी डीबी तालिका या फ़ील्ड कुछ अलग उपयोग न करे।
यदि आप चाहते हैं कि पूरा सर्वर इस डिफ़ॉल्ट संयोजन के साथ प्रतिक्रिया करे तो कॉन्फ़िगरेशन निर्देशों का उपयोग करें:
collation_server=utf8_unicode_ci
character_set_server=utf8
इसलिए आपको इसे हर बार कनेक्शन पर निर्दिष्ट करने की आवश्यकता नहीं है।
संयोजन वर्णों की छँटाई को प्रभावित करते हैं और आपके डेटाबेस में तालिका और फ़ील्ड पर सेट होते हैं। तालिका को क्वेरी करते समय इन सेटिंग्स का सम्मान किया जाता है। सुनिश्चित करें कि वे सेट हैं। अपने डीबी में सेट कोलेशन के साथ यूटीएफ -8 नामों का प्रयोग करें।
आपकी टिप्पणी:
आइए MySQL मैन्युअल से उद्धरण दें इसका प्रमाण देने के लिए:
मेरा उत्तर:यह परोक्ष रूप से काम करता है, जब तक कि आपकी तालिकाएं इसे स्पष्ट रूप से नहीं बदलती।
टिप्पणी से प्रश्न:
उदाहरण:कॉलम कॉलेशन टेबल कॉलेशन को ओवरराइड करता है
CREATE TABLE t1
(
col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
) CHARACTER SET latin1 COLLATE latin1_bin;
यदि एक कॉलम पर CHARACTER SET X और COLLATE Y दोनों निर्दिष्ट हैं, तो कैरेक्टर सेट X और Collation Y का उपयोग किया जाता है। कॉलम में वर्ण सेट है utf8
और संयोजन utf8_unicode_ci
जैसा कि टेबल कॉलम में बताया गया है, जबकि टेबल latin1 + latin1_bin में है।
उदाहरण:सामान्य तौर पर टेबल कोलेशन का उपयोग किया जाता है
यदि कॉलम/फ़ील्ड पर संयोजन स्पष्ट रूप से निर्दिष्ट नहीं है, तो तालिका संयोजन का उपयोग किया जाता है:
CREATE TABLE t1
(
col1 CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;
col1 का संयोजन latin1_bin है।
यदि आप utf8_unicode_ci
चाहते हैं कोलेशन, इसे सामान्य रूप से अपनी टेबल पर या कॉलम/फ़ील्ड पर सेट करें।