Εξαγωγές WordPress και βάσης δεδομένων: Ξ± και ’ αντί για α και ’

Μετά από μεταφορά, ενημέρωση ή εξαγωγή βάσης, τα άρθρα σας δείχνουν ξαφνικά Ξ± αντί για α και ’ αντί για ’; Τα δεδομένα είναι σχεδόν πάντα ακόμη εκεί – απλώς διαβάζονται με λάθος κωδικοποίηση. Το Mojibuster διορθώνει την εξαγωγή και μετά λύνετε την αιτία στη βάση.

Λειτουργεί με κείμενο και με αυτά τα αρχεία:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Για παράδειγμα εξαγωγές από το Excel, αντίγραφα ασφαλείας βάσεων δεδομένων, υπότιτλοι και κώδικας ιστοσελίδων.

Διόρθωση

  1. Σύρετε ένα αρχείο ή επικολλήστε κείμενο
  2. Η διόρθωση γίνεται αυτόματα
  3. Αντιγράψτε ή κατεβάστε το αποτέλεσμα
ή σύρετε το αρχείο εδώ

Πώς φαίνεται το πρόβλημα

Μια γραμμή από dump SQL μετά τη μεταφορά σε νέο διακομιστή

Πριν

INSERT INTO wp_posts (post_title) VALUES ('ÊáëÜ ×ñéóôïýãåííá – ÁèÞíá, ÐÜôñá');

Μετά

INSERT INTO wp_posts (post_title) VALUES ('Καλά Χριστούγεννα – Αθήνα, Πάτρα');

Από πού προέρχεται

Το WordPress αποθηκεύει το κείμενο ως UTF-8. Πολλές παλιότερες εγκαταστάσεις όμως δημιούργησαν τους πίνακες ως latin1 ή συνδέθηκαν με latin1. Όσο η εγγραφή και η ανάγνωση κάνουν το ίδιο λάθος, κανείς δεν το προσέχει. Μετά τη μεταφορά σε νέο διακομιστή, την εξαγωγή με phpMyAdmin ή την αλλαγή της κωδικοποίησης σύνδεσης, κάθε ελληνικό γράμμα γίνεται ξαφνικά δύο χαρακτήρες.

  • Το DB_CHARSET στο wp-config.php είναι latin1 ή δεν ταιριάζει με τους πίνακες.
  • Το dump εξήχθη ως latin1 και εισήχθη ως utf8mb4 – ή αντίστροφα.
  • Ένα πρόσθετο ή ένα script εισαγωγής μετέτρεψε ξανά ήδη χαλασμένο κείμενο. Έτσι προκύπτει διπλά κωδικοποιημένο κείμενο.

Διορθώστε την εξαγωγή

  1. Κάντε αντίγραφο ασφαλείας της βάσης πριν αλλάξετε οτιδήποτε.
  2. Εξαγάγετε τους επηρεασμένους πίνακες ως αρχείο .sql, για παράδειγμα με phpMyAdmin ή με mysqldump --default-character-set=utf8mb4.
  3. Αφήστε το αρχείο στο πεδίο παραπάνω. Το Mojibuster διορθώνει μόνο τα χαλασμένα σημεία και σας δείχνει κάθε αλλαγή.
  4. Κατεβάστε το διορθωμένο αρχείο και εισαγάγετέ το με utf8mb4 σε μια νέα βάση δοκιμών.
  5. Ελέγξτε τον ιστότοπο. Αν όλα φαίνονται σωστά, εισαγάγετέ το στην παραγωγική βάση.

Το dump δεν ανεβαίνει ποτέ πουθενά – κάτι σημαντικό, γιατί συνήθως περιέχει λογαριασμούς χρηστών, διευθύνσεις e-mail και σχόλια. Περισσότερα για επιχειρήσεις και υπεύθυνους προστασίας δεδομένων.

Προσοχή στα σειριοποιημένα δεδομένα

Το WordPress αποθηκεύει ορισμένες ρυθμίσεις στα wp_options και wp_postmeta ως σειριοποιημένες τιμές PHP, όπως s:10:"Αθήνα";. Ο αριθμός είναι το μήκος σε byte. Όταν το Ξ± γίνει ξανά α, δεν ταιριάζει πια και το WordPress απορρίπτει την τιμή. Διορθώστε λοιπόν πρώτα τους πίνακες περιεχομένου όπως wp_posts, wp_comments και wp_terms. Για τις ρυθμίσεις το wp search-replace του WP-CLI είναι το καλύτερο εργαλείο, γιατί ενημερώνει τα μήκη.

Λύστε την αιτία στη MySQL

  • Αλλάξτε τους πίνακες και τη σύνδεση σε utf8mb4 και ορίστε define('DB_CHARSET', 'utf8mb4'); στο wp-config.php.
  • Αν μια στήλη latin1 περιέχει byte UTF-8, μην τη μετατρέψετε απευθείας – θα κωδικοποιηθεί για δεύτερη φορά. Η συνήθης διαδρομή περνά από δυαδικό τύπο: πρώτα MODIFY … LONGBLOB, μετά MODIFY … LONGTEXT CHARACTER SET utf8mb4.
  • Δοκιμάστε κάθε αλλαγή πρώτα σε αντίγραφο της βάσης.

Συχνές ερωτήσεις

Μπορώ να διορθώσω ολόκληρη τη βάση του WordPress με τη μία;

Ναι, ακόμη και μεγάλα dumps SQL. Προσέξτε όμως τα σειριοποιημένα δεδομένα στα wp_options και wp_postmeta – το WP-CLI τα χειρίζεται καλύτερα.

Αλλάζουν οι σωστοί χαρακτήρες στο dump;

Όχι. Το Mojibuster διορθώνει μόνο ακολουθίες που είναι σαφώς χαλασμένες. Το σωστό κείμενο μένει ως έχει.

Ποια η διαφορά ανάμεσα στο utf8 και στο utf8mb4;

Στη MySQL το utf8 αποθηκεύει μόνο χαρακτήρες έως τρία byte, οπότε τα emoji χάνονται. Το utf8mb4 είναι πραγματικό UTF-8 και η σωστή επιλογή για το WordPress.

Λειτουργεί και σε άλλα συστήματα εκτός από το WordPress;

Ναι. Το Joomla, το Drupal, το Magento ή η δική σας εφαρμογή σε MySQL ή MariaDB έχουν το ίδιο πρόβλημα και την ίδια λύση.

Περισσότεροι οδηγοί