जैसा कि प्रश्न शीर्षक से पता चलता है, मैं यह समझने की कोशिश कर रहा हूं कि वर्डप्रेस MySQL वर्ण सेट और कोलाजेशन विकल्पों के साथ कैसे काम करता है। जैसा कि मैं नीचे दिखाऊंगा, चीजें मेरे लिए बहुत मायने नहीं रखती ...
मैंने उनके इंस्टालेशन पेज पर दिए निर्देशों का पालन करते हुए वर्डप्रेस स्थापित किया:
https://codex.wordpress.org/Installing_WordPress
निर्देशों के भाग के रूप में, मैंने कमांड पर MySQL डेटाबेस के मैनुअल निर्माण के लिए उनकी सलाह का पालन किया, अर्थात् कमांड:
mysql> CREATE DATABASE databasename;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON databasename.* TO "wordpressusername"@"hostname"
-> IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
mysql> EXIT
आगे, निर्देश के अनुसार, मैंने UTF-8 वर्ण सेट का उपयोग करने के लिए "wp-config.php" फ़ाइल संपादित की:
define( 'DB_CHARSET', 'utf8' );
... और कोलाज सेटिंग को खाली छोड़ दिया:
define( 'DB_COLLATE', '' );
यहाँ है जहाँ मज़ा शुरू होता है ...
यदि मैं एक ऐसे चरित्र में प्रवेश करता हूं जो MySQL UTF-8 का हिस्सा नहीं है, लेकिन UTF-8 MB4 का हिस्सा है, जैसे कि 𝌆, एक पोस्ट में, यह रेंडर किए गए पेज पर सही ढंग से दिखाई देता है। मुझे उम्मीद थी कि ऐसा नहीं होगा, क्योंकि मैंने चरित्र सेट को UTF-8 MB4 में सेट नहीं किया है, लेकिन अधिक प्रतिबंधित UTF-8 (जैसा कि MySQL द्वारा परिभाषित है, आमतौर पर समझा नहीं गया है)।
यदि मैं कमांड लाइन पर MySQL में समस्या की जांच करता हूं, तो यह अजीब हो जाता है। अगर मैं दौड़ता हूं
show variables like 'char%';
, तो मुझे यह प्रतिक्रिया मिलती है:+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
मुझे उम्मीद है कि डेटाबेस कैरेक्टर का सेट UTF-8 होगा, न कि लैटिन 1।
यदि मैं कमांड चलाता हूं
show variables like 'collation%';
, तो आउटपुट है:+----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | utf8_general_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+
यह भी स्पष्ट कारणों के लिए अजनबी है, (किसी UTF-8 डेटाबेस में डिफ़ॉल्ट latin1_swiki_ci टकराव की उम्मीद नहीं की जाएगी)।
- अंत में, यदि मैं चलाता हूं
show full columns from mywpdatabase.wp_posts;
, तो आउटपुट लाइनें, जहां मान NULL नहीं है, होने के लिए कोलाज दिखाएं:
| post_content_filtered | longtext | utf8mb4_unicode_ci |
मेरा प्रश्न तब - यह कैसे समझाया जा सकता है? जब मेरे डेटाबेस को UTF-8 के रूप में परिभाषित किया जाता है तो मेरे वर्डप्रेस ने UTF-8 MB4 वर्णों को सही तरीके से क्यों स्थापित किया है? और डेटाबेस डेटाबेस में UTF-8 के बजाय MySQL को लैटिन 1, सनी कोलेशन के रूप में क्यों दिखा रहा है? और कैसे आए, कि इस सब के बावजूद, तालिका में व्यक्तिगत क्षेत्र utf8mb4_unicode_ci हैं? जिस तरह से WordSQL MySQL के साथ काम करता है उसका एक निम्न-स्तरीय स्पष्टीकरण बहुत मददगार होगा। धन्यवाद!