Μετατροπή μιας βάσης MySql4.0 με utf-8/ISO-8859 data σε 4.1+

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27616
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Μετατροπή μιας βάσης MySql4.0 με utf-8/ISO-8859 data σε 4.1+

Δημοσίευση από cordis » 26 Ιούλ 2007 02:36

Το πρόβλημα όταν κάνουμε upgrade μια βάση από MySql 4.0 με δεδομένα σε utf-8 σε μια βάση MySql 4.1 και πάνω είναι ότι η 4.0 καταχωρεί τα utf-8 δεδομένα σε latin1 ενώ από την 4.1 και πάνω έχουμε collations και μπορούμε να βάζουμε τα δεδομένα μας σε πραγματικές utf-8 κολόνες.

Για να επιτύχουμε κάτι τέτοιο θα πρέπει να πούμε της 4.0 πως να μας βγάλει τα δεδομένα μας και αντίστοιχα να πούμε στην 4.1 + πως να τα εισάγει. Αυτό θα δούμε εδώ με αυτά τα απλά βήματα:

1. παίρνουμε τα δεδομένα μας ως latin1. Αυτό μπορεί να δουλέψει και αφού έχουμε τοποθετήσει την 4.1+ στον server μας.

Κώδικας: Επιλογή όλων

mysqldump --user=USER_NAME --password=USER_PASS --default-character-set=latin1 --add-drop-table --quote-names --lock-tables --quick --databases DATABASE_NAME > DATABASE_NAME.sql
2. εάν παίρνουμε το export από μια 4.0 τρέχουμε αυτό, για να βάλει τα εξορισμού collations στους πίνακες.

Κώδικας: Επιλογή όλων

perl -p -i -e 's/MyISAM/MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci/g' DATABASE_NAME.sql
εάν παίρνουμε το export από μια 4.1+ τρέχουμε αυτό, για να μετατρέψει το collation από latin1 που της είπαμε να εξάγει σε utf-8.

Κώδικας: Επιλογή όλων

perl -p -i -e 's/latin1/utf8/g' DATABASE_NAME.sql
3. δημιουργούμε τώρα ξανά την βάση μας με εξορισμού character set το utf8

Κώδικας: Επιλογή όλων

DROP DATABASE `DATABASE_NAME`;
CREATE DATABASE `DATABASE_NAME` CHARACTER SET utf8 COLLATE utf8_general_ci;
4. εισάγουμε τα δεδομένα μας στην βάση.

Κώδικας: Επιλογή όλων

mysql -uUSER_NAME -pUSER_PASS -q --default-character-set=utf8  DATABASE_NAME < DATABASE_NAME.sql
κάποιες φορές ίσως χρειαστεί να προσθέσουμε και αυτές τις γραμμές

Κώδικας: Επιλογή όλων

mysql_query&#40;"set character set utf8"&#41;;
mysql_query&#40;"SET names utf8"&#41;;
μέσα στο script μας και αμέσως μετά την σύνδεση με την βάση.

Happy migration! :D

* Πριν κάνουμε οποιαδήποτε ενέργεια αλλαγής στην βάση μας κρατάμε πάντα αντίγραφα ασφαλείας!
Τελευταία επεξεργασία από το μέλος cordis την 13 Μαρ 2008 01:23, έχει επεξεργασθεί 5 φορές συνολικά.
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Μετατροπή μιας βάσης MySql4.0 με utf-8/ISO-8859 data σε 4.1+

Δημοσίευση από cherouvim » 26 Ιούλ 2007 09:05

Καλό. Εγώ στο βήμα 2 αλλάζω το αρχείο σε utf-8 μέσω notepad (Save as encoding).

Και από queries νομίζω αρκεί μόνο το 2ο (set names...)

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27616
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Μετατροπή μιας βάσης MySql4.0 με utf-8/ISO-8859 data σε 4.1+

Δημοσίευση από cordis » 26 Ιούλ 2007 15:11

καλό και τo notepad, αλλά άμα έχεις την βάση του http://directory.way.gr/ ή τίποτα σε μέγεθος freestuff.gr δε σε σώζει... έτσι γλυτώνεις και την τοπική μεταφορά.. ;)

ναι, στα queries αρκεί το set names... είναι το στιλ.. "το κάνω 2 φορές για να είμαι σίγουρος!" :D
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27616
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Μετατροπή μιας βάσης MySql4.0 με utf-8/ISO-8859 data σε 4.1+

Δημοσίευση από cordis » 03 Αύγ 2007 19:13

Για να μετατρέψουμε μια βάση με δεδομένα σε ISO-8859-7 από MySQL 4.0 σε 4.1 και πάνω ακολουθούμε τα ίδια βήματα με παραπάνω με κάποιες μικρές διαφορές


1. παίρνουμε τα δεδομένα μας ως latin1. Αυτό μπορεί να δουλέψει και αφού έχουμε τοποθετήσει την 4.1+ στον server μας.

Κώδικας: Επιλογή όλων

mysqldump --user=USER_NAME --password=USER_PASS --default-character-set=latin1 --add-drop-table --quote-names --lock-tables --quick --databases DATABASE_NAME > DATABASE_NAME.sql
2. εάν παίρνουμε το export από μια 4.0 τρέχουμε αυτό, για να βάλει τα εξορισμού collations στους πίνακες.

Κώδικας: Επιλογή όλων

perl -p -i -e 's/MyISAM/MyISAM DEFAULT CHARSET=greek COLLATE=greek_general_ci/g' DATABASE_NAME.sql
εάν παίρνουμε το export από μια 4.1+ τρέχουμε αυτό, για να μετατρέψει το collation από latin1 που της είπαμε να εξάγει σε utf-8.

Κώδικας: Επιλογή όλων

perl -p -i -e 's/latin1/greek/g' DATABASE_NAME.sql
3. δημιουργούμε τώρα ξανά την βάση μας με εξορισμού character set το utf8

Κώδικας: Επιλογή όλων

DROP DATABASE `DATABASE_NAME`;
CREATE DATABASE `DATABASE_NAME` CHARACTER SET greek COLLATE greek_general_ci;
4. εισάγουμε τα δεδομένα μας στην βάση.

Κώδικας: Επιλογή όλων

mysql -uUSER_NAME -pUSER_PASS -q DATABASE_NAME < DATABASE_NAME.sql
κάποιες φορές ίσως χρειαστεί να προσθέσουμε και αυτές τις γραμμές

Κώδικας: Επιλογή όλων

mysql_query&#40;"SET names greek"&#41;;
μέσα στο script μας και αμέσως μετά την σύνδεση με την βάση.

* Πριν κάνουμε οποιαδήποτε ενέργεια αλλαγής στην βάση μας κρατάμε πάντα αντίγραφα ασφαλείας!
Τελευταία επεξεργασία από το μέλος cordis την 13 Μαρ 2008 01:24, έχει επεξεργασθεί 1 φορά συνολικά.
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

jgeorgiou
Δημοσιεύσεις: 7
Εγγραφή: 16 Δεκ 2002 21:36
Τοποθεσία: athens
Επικοινωνία:

Μετατροπή μιας βάσης MySql4.0 με utf-8/ISO-8859 data σε 4.1+

Δημοσίευση από jgeorgiou » 20 Νοέμ 2007 00:32

Στο

www.triti.gr

χρησιμοποιώ php/mysql , O Mozilla δείχνει σωστά ελληνικά ενώ ο ΙΕ έχει προβλημα! Μπορει να μου πει καποιος τι συμβαινει??

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Μετατροπή μιας βάσης MySql4.0 με utf-8/ISO-8859 data σε 4.1+

Δημοσίευση από Cha0s » 16 Ιαν 2008 10:35

Καμιά ιδέα για αναβάθμιση από mysql 4.0 σε mysql 5.0 με καμιά 200αριά βάσεις;

Δοκίμασα με hard copy (παλιότερα μου είχε δουλέψει αυτή η μέθοδος από 4.0 σε 4.1) και την παρακάτω παράμετρο στο my.cnf init-connect='SET NAMES greek' αλλά τα Ελληνικά βγαίνουν ότι κάτσει...


Any ideas?

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27616
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Μετατροπή μιας βάσης MySql4.0 με utf-8/ISO-8859 data σε 4.1+

Δημοσίευση από cordis » 16 Ιαν 2008 23:55

θα σου πω τι θα έκανα εγώ...

list τις databases με mysql_list_dbs( );

κατασκευή με την php ενός migate.sh αρχείου με τις εντολές που υπάρχουν εδώ
και για όλες τις βάσεις σειριακά.

το κάνουμε 'x' και το τρέχουμε...

πως το βλέπεις;
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Μετατροπή μιας βάσης MySql4.0 με utf-8/ISO-8859 data σε 4.1+

Δημοσίευση από Cha0s » 17 Ιαν 2008 09:54

Δεν βολεύει ιδιαίτερα...

Απότι το έψαξα λίγο χθες άλλες βάσεις θέλουν greek_general_ci και άλλες utf8_general_ci...

Υποθέτω πως θέλει greek σε όσες βάσεις καταχωρούνται δεδομένα από φόρμες με ISO-8859-7 ενώ UTF8 για όσες φόρμες έχουν utf8 charset.

Το παρατήρησα αυτό σε μεταφορές βάσεων από δικά μου panels (παίζω με ISO-8859-7) σε αντίθεση με κάτι phpBB3 που παίζει με UTF8.

Κοινώς απόσο καταλαβαίνω μάλλον πρέπει να γίνει manual η τράμπα για κάθε βάση μιας και δεν ξέρω πως με script να δηλώσω το σωστό encoding για κάθε βάση...

fractalbit
Δημοσιεύσεις: 17
Εγγραφή: 20 Σεπ 2004 23:33

Μετατροπή μιας βάσης MySql4.0 με utf-8/ISO-8859 data σε 4.1+

Δημοσίευση από fractalbit » 17 Ιαν 2008 21:20

Καλησπέρα, πάρα πολύ χρήσιμο το post αυτό!

Νομίζω όμως ότι έχει ένα πολύ σημαντικό λάθος!

Η 4η εντολή θα έπρεπε να είναι ...

Κώδικας: Επιλογή όλων

mysql -uUSER_NAME -pUSER_PASS -q --default-character-set=utf8  DATABASE_NAME < DATABASE_NAME.sql
Δηλαδή < αντί για >

Διορθώστε με αν κάνω λάθος.

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27616
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Μετατροπή μιας βάσης MySql4.0 με utf-8/ISO-8859 data σε 4.1+

Δημοσίευση από cordis » 17 Ιαν 2008 23:10

σωστός ο fractalbit ;)
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Απάντηση

Επιστροφή στο “MySQL”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες