MySQL kai character set

rouvas at di.uoa.gr rouvas at di.uoa.gr
Tue May 15 01:08:48 EEST 2007


> On Mon, 2007-05-14 at 21:54 +0300, Nikos Kanellopoulos wrote:
>> Μάλλον τα έκανα λίγο θάλασσα.
>>
>> Ας τα πάρουμε από την αρχή. Όταν ξεκίνησα μια βάση mysql, δεν πείραξα
>> το character set, οπότε χρησιμοποιήθηκε το default latin1. Τα δεδομένα
>> που έβαζα ήταν iso-8859-7.  Δεν είμαι σίγουρος, αλλά φαίνεται πως το
>> latin1 είναι 8-bit, οπότε δεν παρατήρησα κανένα πρόβλημα. Εκτός ίσως
>> από το collation, που το ανακάλυψα πρόσφατα.
>>
>> Τώρα όμως ήρθε η ώρα να κάνω καταχώρηση σε utf8. Χμμ. Κάνοντας ALTER
>> TABLE, ο πίνακας δηλώνει πλέον UTF8 αλλά οι varchar κολώνες παραμένουν
>> latin1. ¶ψογα. Αλλά και να πετύχαινε η μετατροπή, η mysql δεν γνωρίζει
>> ότι περιέχει ελληνικά για να κάνει κάποια μετατροπή.
>>
>> Δοκίμασα να τρέξω το recode πάνω στο output της mysqldump (που είναι
>> UTF8). Τζίφος. Το άσχημο είναι ότι τελικά τα δεδομένα καταλήγουν σε
>> HTML. Ανάλογα λοιπόν με το encoding της HTML, φαίνονται σωστά ή τα
>> παλιά ή τα καινούρια (που είναι ακόμη λίγα).
>>
>> Υπάρχει λύση που να μην είναι οδυνηρή;
>
> Επειδή την είχα πατήσει άσχημα με δεδομένα στα ελληνικά, δοκίμασε να
> παίξεις με το --default-character-set κατά το dumping γιατί το default
> "παίζει" ανάλογα με την έκδοση:

Επίσης, το αρχείο με τις SQL δηλώσεις που προκύπτει από το mysqldump
περιέχει στην αρχή εντολή του τύπου "SET COLLATION". Εκεί μπορείς να
βάλεις τη δικιά σου και να κάνεις import τα στοιχεία σου στη νέα βάση.

...και να θυμάσει, μόνο UTF8 από δω και μπρος:-)

Εναλλακτικά, εάν τίποτα από όλα αυτά δεν δουλέψει, μπορείς να ακολουθήσεις
και την εξής διαδικασία:

1) Κάνεις dump μόνο τα DDL που αφορούν στους πίνακες που δε ενδιαφέρουν
2) Τροποποιείς τις προκύπτουσες SQL δηλώσεις ώστε όλοι οι πίνακες να
χρησιμοποιούν UTF8 encoding
3) Δημιουργείς μια νέα βάση δεδομένων με τα τροποποιημένα DDL
4) γράφεις ένα PHP προγραμματάκι που να διαβάζει από την παλιά βάση και να
γράφει στην καινούρια χρησιμοποιώντας το mb_convert_encoding για την
μετατροπή από το ένα encoding στο άλλο.

Κοπιαστικό, αλλά δουλεύει...

-Στάθης

>
> Από mysql 5 manual:
> If no character set is specified, mysqldump uses utf8, and earlier
> versions use latin1.
>
> Το πιο σημαντικό: κράτα ένα backup της βάσης όπως ήταν πριν κάνεις
> οποιαδήποτε αλλαγή, ακόμη κι αν το αποτέλεσμα των αλλαγών σου φανεί
> απολύτως εντάξει. Ποτέ δεν ξέρεις αν τα έχεις ελέγξει όλα.
>
>
>
> --
> linux-greek-users mailing list -- http://lists.hellug.gr






More information about the Linux-greek-users mailing list