समस्या कस्तो देखिन्छ
पहिले
INSERT INTO wp_posts (post_title) VALUES ('नेपाली à¤à¤¾à¤·à¤¾ र नाम');पछि
INSERT INTO wp_posts (post_title) VALUES ('नेपाली भाषा र नाम');यो कहाँबाट आउँछ
WordPress ले टेक्स्ट UTF-8 मा राख्छ। तर धेरै पुराना साइटमा टेबल latin1 मा बनेका थिए वा कनेक्सन latin1 बाट जोडिन्थ्यो। लेख्दा र पढ्दा उही गल्ती भइरहेसम्म कसैले थाहा पाउँदैन। नयाँ सर्भरमा सार्दा, phpMyAdmin बाट एक्सपोर्ट गर्दा वा कनेक्सनको charset बदल्दा हरेक नेपाली अक्षर अचानक धेरै अनौठा चिह्नमा बदलिन्छ।
wp-config.phpमाDB_CHARSETको मानlatin1छ वा टेबलसँग मेल खाँदैन।- डम्प
latin1मा एक्सपोर्ट भयो रutf8mb4मा इम्पोर्ट भयो, वा उल्टो। - कुनै प्लगइन वा इम्पोर्ट स्क्रिप्टले पहिले नै बिग्रिएको टेक्स्टलाई अर्को पटक बदल्यो। यसले दुई पटक बिग्रिएको टेक्स्ट बनाउँछ, जस्तै
à ¤Â।
एक्सपोर्ट ठीक गर्नुहोस्
- केही बदल्नुअघि डाटाबेसको ब्याकअप लिनुहोस्।
- प्रभावित टेबल
.sqlफाइलमा एक्सपोर्ट गर्नुहोस्, जस्तै phpMyAdmin बाट वाmysqldump --default-character-set=utf8mb4बाट। - फाइल माथिको बक्समा राख्नुहोस्। Mojibuster ले बिग्रिएका ठाउँ मात्र ठीक गर्छ र हरेक परिवर्तन देखाउँछ।
- ठीक गरिएको फाइल डाउनलोड गरी
utf8mb4सहित नयाँ परीक्षण डाटाबेसमा इम्पोर्ट गर्नुहोस्। - साइट जाँच्नुहोस्। सबै ठीक देखिए वास्तविक डाटाबेसमा इम्पोर्ट गर्नुहोस्।
डम्प कहिल्यै अपलोड हुँदैन। यो महत्त्वपूर्ण छ, किनभने त्यसमा प्रायः प्रयोगकर्ता खाता, इमेल ठेगाना र टिप्पणी हुन्छन्। यसबारे थप कानुनी जानकारी मा।
serialized डाटासँग सावधान
WordPress ले केही सेटिङ wp_options र wp_postmeta मा serialized PHP मानका रूपमा राख्छ, जस्तै s:12:"भाषा";। संख्या बाइटमा लम्बाइ हो (देवनागरीको हरेक अक्षरले ३ बाइट लिन्छ)। टेक्स्टको लम्बाइ बदलिएपछि संख्या मेल खाँदैन र WordPress ले त्यो मान छोड्छ। त्यसैले पहिले wp_posts, wp_comments र wp_terms जस्ता सामग्री टेबल ठीक गर्नुहोस्। options का लागि WP-CLI को wp search-replace राम्रो हो, किनकि त्यसले लम्बाइ पनि अपडेट गर्छ।
MySQL मा मूल कारण सुधार्नुहोस्
- टेबल र कनेक्सन
utf8mb4मा लैजानुहोस् रwp-config.phpमाdefine('DB_CHARSET', 'utf8mb4');राख्नुहोस्। latin1कोलममा UTF-8 बाइट छन् भने सिधै नबदल्नुहोस्, नत्र टेक्स्ट दोहोरिएर इन्कोड हुन्छ। सामान्य बाटो बाइनरी टाइप हुँदै जान्छ: पहिलेMODIFY … LONGBLOB, अनिMODIFY … LONGTEXT CHARACTER SET utf8mb4।- हरेक परिवर्तन पहिले डाटाबेसको प्रतिलिपिमा प्रयास गर्नुहोस्।
धेरै सोधिने प्रश्नहरू
पूरै WordPress डाटाबेस एकैपटक ठीक गर्न सकिन्छ?
सकिन्छ, ठूला SQL डम्प पनि। तर wp_options र wp_postmeta को serialized डाटामा ध्यान दिनुहोस्; त्यहाँ WP-CLI राम्रो हो।
डम्पका ठीक अक्षर बदलिन्छन्?
बदलिँदैनन्। Mojibuster ले स्पष्ट रूपमा बिग्रिएका क्रम मात्र ठीक गर्छ। ठीक टेक्स्ट जस्ताको तस्तै रहन्छ।
utf8 र utf8mb4 मा के फरक छ?
MySQL मा utf8 ले तीन बाइटसम्मका अक्षर मात्र राख्छ, त्यसैले इमोजी हराउँछन्। utf8mb4 वास्तविक UTF-8 हो र WordPress का लागि सही छनोट हो।
के यो WordPress बाहेक अरू प्रणालीमा पनि चल्छ?
चल्छ। Joomla, Drupal, Magento वा MySQL/MariaDB मा बनेको तपाईंको आफ्नै एप, सबैमा उही समस्या र उही समाधान हो।