MySQL + Qt4 πρόβλημα character set

Alexandros Kosiaris alex at noc.grnet.gr
Fri Feb 20 17:40:54 EET 2009


Theodore Lytras wrote:
> Μια ερώτηση, γιατί κοντεύει να μου στρίψει και δε βρίσκω άκρη.......
> 
> Φτιάχνω ένα εφαρμογίδιο με Qt4, το οποίο επικοινωνεί με μια βάση
> δεδομένων mysql και διαβάζει (και κάνει edit) ένα πίνακα της βάσης.
> Κάνει χρήση των κλάσεων QSqlDatabase, QSqlTableModel και QTableView,
> και η έμπνευση προήλθε από το tutorial του αγαπητού Δημήτρη Καλαμαρά
> (http://dimitris.apeiro.gr/2008/10/07/qt-μέρος-iι-βάσεις-δεδομένων/)...
> 
> Το πρόβλημά μου είναι πως ότι και να κάνω, δε βλέπω ελληνικά στην εφαρμογή μου.
> 
> Δημιουργώ τον πίνακα με το mysql monitor, και ορίζω CHARACTER SET utf8
> COLLATE utf8_general_ci .
> 
> Οι (με ελληνικούς χαρακτήρες) εγγραφές που περνώ στον πίνακα με το
> mysql monitor, εμφανίζονται στην εφαρμογή Qt σαν ιερογλυφικά (βλέπε
> συνημμένο), ενώ οι ίδιες εγγραφές που περνώ με την εφαρμογή
> εμφανίζοναι στο mysql monitor σαν ερωτηματικά.
> 
> Είναι δε ενδιαφέρον οτι οι εγγραφές που περνώ με την εφαρμογή, αν
> κλείσω και ξανανοίξω την εφαρμογή, εμφανίζονται κανονικά με ελληνικούς
> χαρακτήρες. Άρα αυτό μου λέει οτι "σε επίπεδο byte" αποθηκεύονται
> κανονικά και διαβάζονται κανονικά, αλλά υπάρχει κάποια "δυσαρμονία"
> στο encoding μεταξύ Qt και mysql. Ποιά όμως, αφού και τα δύο δουλεύουν
> με UTF8????
> 
> Ακόμη πιο ενδιαφέρον είναι οτι το ίδιο ακριβώς παρουσιάζεται όταν
> δημιουργήσω τον πίνακα με CHARACTER SET latin1 COLLATE
> latin1_general_ci . Και εδώ μπαίνω σε σκέψεις: μήπως η mysql ότι κι αν
> της πω εγώ, με αγνοεί και δουλεύει με latin1 charset? Άλλωστε και με
> το mysqldump, όταν παίρνουμε backup, είναι γνωστό οτι για να φανούν τα
> ελληνικά ορίζουμε την παράμετρο --default-character-set=latin1 . Μήπως
> αυτό είναι το πρόβλημα??
> 
> Και αν είναι αυτό το πρόβλημα, πως διάολο θα πω στην Qt οτι αυτό που
> διαβάζει δεν είναι UTF8 και πρέπει να κάνει μετατροπή?? Δε βρίσκω
> κάποια σχετική συνάρτηση στα docs......

Ένα SET NAMES utf8;
μετά το άνοιγμα του connection και από τις δύο εφαρμογές λογικά θα σου
λύσει το πρόβλημα.

Εκείνο που φοβάμαι ότι συμβαίνει είναι το default charset για τους mysql
clients είναι latin1

Εάν βάλεις στο /etc/my.cnf

[mysql]
default-character-set=utf8

το λύνει για την mysql command. Αλλά δεν γνωρίζω κατά πόσο το κάνουν
honour και οι εφαρμογές....


-- 
Alexandros Kosiaris 	Network Operation Center , GRNET S.A.
e-mail : alex at noc.grnet.gr
Public Key Fingerprint :
D6B1 0634 BE65 719C 6C95  7492 8201 4B46 C478 F074




More information about the Linux-greek-users mailing list