Πρόβλημα με βάση δεδομένων

Started by Yngwiedis, January 10, 2008, 10:21:15 AM

Previous topic - Next topic

Yngwiedis

Καλή Χρονιά σε όλους.

Μετά από μία μεταφορά της βασης δεδομένων του SMF μου σε άλλον hosting provider αντιμετωπίζω το εξής πρόβλημα.
Όλα τα ελληνικά εμφανίζονται σαν ερωτηματικά, εκτός και αν βάλω στο index.php του SMF το εξής query.
mysql_query("SET NAMES 'greek'");

Η version της MySQL και των 2 hosting provider είναι ίδια (5.0.45)
Το collation στις βάσεις είναι επίσης ίδιο (latin1_swedish_ci).

Υπάρχει κάποιος τρόπος να ξεφορτωθώ αυτό το query και να λειτουργούν όλα όπως πρίν ;
AmityHost.com - The Affordable Host

GoofyX

Ναι, να μετατρέψεις το forum σου σε utf-8 ώστε να γλυτώσεις το επιπλέον αυτό ερώτημα. :)
... Morpheus: What is "real"? How do you define "real"? If you 're talking about what you can feel, what you can smell, what you can taste and see, then "real" is simply electrical signals interpreted by your brain...

Yngwiedis

Μα τόσο καιρό δεν το χρησιμοποιούσα σε UTF 8...
AmityHost.com - The Affordable Host

GoofyX

Τότε το είχες στο default του, το latin1. Εδώ πρέπει να σε διαφωτίσει ο agridoc. Δες αυτό για περισσότερα.
... Morpheus: What is "real"? How do you define "real"? If you 're talking about what you can feel, what you can smell, what you can taste and see, then "real" is simply electrical signals interpreted by your brain...

Yngwiedis

Και η παλιά βάση και η νέα βάση έχουν όπως σας έγραψα και παραπάνω ακριβώς το ίδιο collation.
latin1_swedish.ci
AmityHost.com - The Affordable Host

Yngwiedis

Λοιπόν...
Το πρόβλημα από οτι φαίνεται είναι οτι για κάποιο λόγο, κάποια δεδομένα έχουν περάσει στην βάση με collation greek.
Υπάρχει κάποιο MySQL query για να μετατρέψω ΟΛΑ τα δεδομένα σε latin1_swedish.ci ;
AmityHost.com - The Affordable Host

Yngwiedis

AmityHost.com - The Affordable Host

GoofyX

Έχεις backup (αρχείο sql) της παλιάς βάσης;
... Morpheus: What is "real"? How do you define "real"? If you 're talking about what you can feel, what you can smell, what you can taste and see, then "real" is simply electrical signals interpreted by your brain...

Yngwiedis

AmityHost.com - The Affordable Host

GoofyX

Τότε, εν ολίγοις, θα πρέπει να κάνεις τα εξής:

Στο export που έχεις (αφού έχεις πάρει αντίγραφο του αρχείου), θα σβήσεις τη δήλωση charset=utf-8 και οτιδήποτε σχετικό με character set στις δηλώσεις create table των πινάκων. Σε νέα βάση με default character set latin1 (και το αντίστοιχο collation), θα συνδεθείς με τον client σου με character set latin1 (αυτό εξαρτάται από το πως συνδέεσαι με τη βάση). Το export που έχεις, αν είναι σε utf-8 (το αρχείο) θα πρέπει να το αντιγράψεις σε νέο αρχείο με latin-1 encoding. Λογικά αν κάνεις import το τελευταίο, θα σου παίζει οκ.

Με τι λειτουργικό δουλεύεις;
... Morpheus: What is "real"? How do you define "real"? If you 're talking about what you can feel, what you can smell, what you can taste and see, then "real" is simply electrical signals interpreted by your brain...

Yngwiedis

Το λειτουργικό του server είναι linux.
Εγώ χρησιμοποιώ XP.

Αυτό που λες όμως πρακτικά είναι αδύνατον.
Η βάση είναι τεράστια και το .sql δεν ανοίγει με κανέναν editor λόγω μεγέθους...
AmityHost.com - The Affordable Host

Yngwiedis

Άνοιξα το .sql ενός δεύτερου forum που έχω, και από οτι βλέπω το PHPMyAdmin ( από αυτό κάνω backup και restore τις βάσεις ) δεν σώζει μέσα character set εντολή όταν δημιουργεί τα tables...
AmityHost.com - The Affordable Host

GoofyX

Σοβαροί editors θα το ανοίξουν το αρχείο (πόσο είναι, είναι πάνω από 10ΜΒ;). Δοκίμασε με Wordpad, θα κάνει ώρα μεν, αλλά θα ανοίξει.

Στο server έχεις ssh πρόσβαση;

ΟΚ, αν δεν έχει δήλωση για character set, φρόντισε η νέα βάση να είναι σε latin1, όπως και το ίδιο το αρχείο, και δοκίμασε import.
... Morpheus: What is "real"? How do you define "real"? If you 're talking about what you can feel, what you can smell, what you can taste and see, then "real" is simply electrical signals interpreted by your brain...

Yngwiedis

Κι όμως ούτε το wordpad το ανοίγει. Είναι πάνω από 250 MBs σε .sql μορφή. Σαν .gzip είναι πολύ μικρότερο.

Η νέα βάση είναι σε latin1. To αρχείο πως θα δω αν είναι ; Δεν το καταλαβαίνω αυτό.
AmityHost.com - The Affordable Host

Yngwiedis

#14
Λοιπόν τσέκαρα κάποιες επιπλέον επιλογές στο PHPMyAdmin κατά την διαδικασία του export και πλέον έχει μέσα character set το .sql.
Όλα όμως λένε UTF-8.
Αν θέλεις να βοηθήσεις ανέβασα το αρχείο ενός πολύ μικρότερου forum, που έχει το ίδιο ακριβώς πρόβλημα με το τεράστιο.

Διαγραφή link από moderator

Ρίξε μια ματιά και πες μου τι ακριβώς να αλλάξω.

Σε ευχαριστώ.
AmityHost.com - The Affordable Host

agridoc

Χωρίς να μπορώ να το τεκμηριώσω, η διαδικασία που ακολουθώ με το PhpMyAdmin, χωρίς προβλήματα έως τώρα, είναι η εξής:

1. Δημιουργία backup

Βάζουμε το PhpMyAdmin στο ίδιο collation που έχει και η βάση που θέλουμε να πάρουμε σε backup.

Δημιουργούμε το backup.

2. Ανέβασμα του backup

Βάζουμε το PhpMyAdmin στο ίδιο collation που έχει και η βάση, της οποίας το backup θέλουμε ν' ανεβάσουμε.

Ανεβάζουμε το backup με import.

Από τα δύο σκέλη το 2ο φαίνεται πιο σημαντικό. Είχα προβλήματα σε ανέβασμα backup UTF-8, το οποίο λύθηκε όταν το ξαναανέβασα έχοντας βάλει το collation του PhpMyAdmin σε UTF-8. Δεν απόλυτα σίγουρος οτι έφταιγε αυτό ή κάτι στον host που ρυθμίστηκε μετα από επικοινωνία.

Το σίγουρο είναι οτι από τότε, ακολουθώντας αυτή την διαδικασία,  δεν είχα ποτέ προβλήματα.

Νομίζω οτι το backup καλό είναι να είναι σε UTF-8, στο ανέβασμα καθορίζεται ο τρόπος καταχώρησης.
  For Greek aeromodellers and our friends around the world  - Greek Button sets for SMF - Greeklish to Greek mod
Δeν αφιερώνω χρόνο για μηνύματα σε greeklish.

Yngwiedis

#16
Κι όμως φίλε agridoc αυτά που επισημαίνεις τα έχω κάνει και δεν είδα καμμία διαφορά...

Τέλος πάντων το πρόβλήμα της δικής μου βάσης είναι οτι έχει δεδομένα σε 2 διαφορετικά collation.
Υπάρχει τρόπος να τα μετατρέψω όλα σε ίδιο collation ;
AmityHost.com - The Affordable Host

agridoc

Επικοινώνησε με τον host σου, ίσως είναι θέμα συστήματος.

Στήσε ένα νέο δοκιμαστικό φόρουμ στον νέο server, γράψε λίγα μηνύματα στα ελληνικά και δοκίμασε backup - restore με μικρή βάση για να μην χάνεις χρόνο.

Αν δεν στο ανεβάζει σωστά είναι θέμα host.

Είναι σημαντικό και για αργότερα.
  For Greek aeromodellers and our friends around the world  - Greek Button sets for SMF - Greeklish to Greek mod
Δeν αφιερώνω χρόνο για μηνύματα σε greeklish.

Yngwiedis

Να τα ξαναπώ άλλη μια φορά...

Ο host δεν έχει να κάνει με αυτό το πρόβλημα.
Η version της MySQL είναι ίδια με τον παλιό host.
Το default collation της νέας βάσης είναι ίδιο με της παλιάς βάσης.
Το default character set της νέας βάσης είναι ίδιο με της παλιάς βάσης.

Όλο το πρόβλημα έχει να κάνει με το οτι ο συνάδελφος admin έβαλε (για κάποιο λόγο που μόνο αυτός ξέρει) κάποια στιγμή στο index.php το query mysql_query("SET NAMES 'greek'");
Αυτό είχε σαν αποτέλεσμα μερικά περεχόμενα μέσα στα tables να σώζωνται με collation greek_general_ci.

Όταν λοιπόν έγω πήρα backup της βάσης από τον παλιό host, είχα στα χέρια μου ένα .sql με 2 διαφορετικά collations μέσα στα δεδομένα.
To πέρασα λοιπόν αυτό στην νέα βάση χωρίς πρόβλημα.
Αν πάω τώρα στο index.php και αφαιρέσω το mysql_query("SET NAMES 'greek'"); βλέπω ερωτηματικά.
Εγώ θέλω και να μπορέσω να ξεφορτωθώ αυτό το query και να φέρω την βάση σε ίδιο collation γιατί έχω πρόβλημα με mods που προσπαθώ να εγκαταστήσω (παίρνω συνέχεια error messages με illegal mix of collation).

Ουφ... αυτά...
AmityHost.com - The Affordable Host

GoofyX

Λοιπόν, μισό λεπτό να ξεκαθαρίσω ορισμένα σημεία, γιατί υπάρχει σύγχιση:

- Όταν λέμε collation, εννοούμε τον τρόπο με τον οποίο γίνεται η ταξινόμηση των αλφαριθμητικών. Αυτό που έχει περισσότερο σημασία, είναι το character set, ο τρόπος με τον οποίο αποθηκεύονται οι μη-λατινικοί χαρακτήρες στη βάση. Άρα, καλό είναι να αναφερόμαστε στο character set (charset).

- Η set names 'greek'; δεν αλλάζει κάτι στη βάση. Αλλάζει το character set με το οποίο γίνεται η συννενόηση με τη βάση (πως διαβάζουμε τα αλφαριθμητικά δηλαδή) στην τρέχουσα σύνοδό μας (session) με τη βάση. Αυτό που ορίζει το character set και το collation υπάρχει από τη μια στο τέλος κάθε create table και σε αυτό που φτιάχνουμε κατά τη διάρκεια της βάσης create database lalakis default character set utf8; Το πρώτο (αν ορίζεται) υπερισχύει του δεύτερου, ενώ το δεύτερο ισχύει σε περίπτωση που δεν δηλώνεται το character set στην τέλος της create table. Άρα, την set names την έβαλα επειδή η βάση μου είναι σε greek character set (με το αντίστοιχο default collation για τα ελληνικά), επειδή το θεώρησα εγώ έτσι ότι είναι το σωστό, και χρειάζεται η παρεμβολή της set names για να παίξει σωστά σε αυτή την περίπτωση (και κάποιες άλλες ψιλοεπεμβάσεις). Αν δεν θέλετε να ακολουθήσετε αυτή τη λύση, κανένα πρόβλημα.

- Για μένα, το να αποθηκεύεις ελληνικά σε latin1 είναι ματσακονιά. Έχω ξαναπεί ότι δουλεύει επειδή τα γράφεις και τα διαβάζεις στη βάση με τον ίδιο τρόπο, αυτό όμως δε σημαίνει ότι είναι και σωστό. Βάλτε utf8 να είστε σωστοί παντού και να μην έχετε προβλήματα σε import/export, εφόσον όλα είναι utf-8. Αφήστε που θα υποστηρίζετε και άλλες γλώσσες εκτός των ελληνικών.

Τα βήματα που πρέπει να κάνει ο Yngwiedis τα συνόψισα σε προηγούμενο μήνυμά μου. Εφόσον θα είναι η βάση latin1, θα πρέπει να έχει ατροποποίητο SMF (χωρίς επέμβαση στον κώδικά του, αυτό μόνο δεν ανέφερα πριν), δηλαδή το set names 'greek' θα πρέπει να πάρει πόδι.

Yngwiedis, το export σου είναι τεράστιο (δεν φανταζόμουν και 250ΜΒ)! Δύσκολα θα το επεξεργαστείς. Θα πρέπει να σβήσεις στο τέλος κάθε create table δήλωσης, το character set και το collation. Το αρχείο σου είναι σε utf8 τώρα, θα πρέπει να το σώσεις με κάποιο τρόπο σε latin1 πριν το import.
... Morpheus: What is "real"? How do you define "real"? If you 're talking about what you can feel, what you can smell, what you can taste and see, then "real" is simply electrical signals interpreted by your brain...

Advertisement: