Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πρόβλημα με ελληνικά σε Windows 7 + SqlExpress 2008 + Non-unicode Application

Îåêßíçóå áðü ôï ìÝëïò Null. Τελευταία δημοσίευση από το μέλος Null στις 24-12-2009, 14:23. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-12-2009, 12:46 56061

    Πρόβλημα με ελληνικά σε Windows 7 + SqlExpress 2008 + Non-unicode Application

    Έχω ένα laptop με Windows 7 Pro (x86) Ελληνικά προεγκατεστημένα και εγκατεστημένο MSSQL Express 2008.

    Η εφαρμογή που τρέχω είναι φτιαγμένη σε VC++ 2008 (MFC9) και δεν είναι unicode.
    Τα windows είναι ρυθμισμένα να διαλέγουν ως γλώσσα την ελληνική για εφαρμογές που δεν είναι unicode.

    Η εφαρμογή δείχνει κανονικά τα ελληνικά σε όλες τις γραμματοσειρές που χρησιμοποιεί με εξαίρεση τα δεδομένα που προέρχονται από τη βάση που συνδέεται (ADODB).
    Η μορφή που τα δείχνει είναι κάπως έτσι: ????m?a??

    Στις βάσεις που συνδέεται η εφαρμογή, όλα τα αλφαριθμητικά δεν είναι unicode. Δοκιμάσαμε να τα μετατρέψουμε όλα τα πεδία στα αντίστοιχα unicode (varchar->nvarchar, char->nchar κλπ), αλλά το πρόβλημα εξακολουθεί να υπάρχει.
    Σημειωτέον, ότι η εφαρμογή έχει δοκιμαστεί σε άλλα συστήματα με windows 7 και sql2008 σε διάφορες εκδόσεις και δεν υπήρχε πρόβλημα.

    Αν κάποιος έχει κάποια ιδέα για το τις πταίει...

    Ευχαριστώ!

    In dark places we will be
    forever beyond the light
    In dark places we will be free
    from the pain that fills our lives
  •  24-12-2009, 13:47 56062 σε απάντηση της 56061

    Απ: Πρόβλημα με ελληνικά σε Windows 7 + SqlExpress 2008 + Non-unicode Application

    Ο SQL Server ΔΕΝ ΧΡΕΙΑΖΕΤΑΙ κόλπα για να υποστηρίξει τα ελληνικά Τα προβλήματα δημιουργούνται πάντα όταν μία εφαρμογή δεν υποστηρίζει unicode και μπερδεύει τα codepages. Δεν φταίνε τα fonts, η έκδοση του λειτουργικού ή του SQL Server. Το πρόβλημα εμφανίζεται αν πας να αποθηκεύσεις από ένα μηχάνημα με A system locale ASCII δεδομένα σε κάποια βάση με B locale και μετά δοκιμάσεις να τα διαβάσεις από ένα άλλο μηχάνημα με Γ locale. Το ότι ως τώρα τα δεδομένα εμφανίζονταν σωστά είναι καθαρά θέμα τύχης: δεν έτυχε ποτέ το locale του client και του server να διαφέρουν.

    Στη συγκεκριμένη περίπτωση πρέπει να αποθηκεύθηκαν τα δεδομένα με ένα codepage και να προσπαθείς να τα διαβάσεις με ένα άλλο στο οποίο δεν γίνεται μετατροπή. Τα ??? εμφανίζονται όταν ο OLEDB driver προσπαθεί να μετατρέψει ένα χαρακτήρα από το codepage που του λέει η βάση σε αυτό που του ζητάει η εφαρμογή και δεν τα καταφέρνει. Αν για παράδειγμα κάποιος στο PC με αγγλικό locale σώσει ελληνικσε server με ελληνικό collation το string που θα αποθηκευθεί θα είναι άσχετο.

    Δεν έχει νόημα η αλλαγή του τύπου των δεδομένων εκ των υστέρων, γιατί τα αρχικά δεδομένα είναι αυτά που έχουν το πρόβλημα, όχι ο τύπος των αποθηκευμένων δεδομένων. Τα strings αποθηκεύθηκαν με λάθος ASCII codes οπότε η αλλαγή από varchar σε nvarchar θα δημιουργήσει Unicode χαρακτήρες οι οποίοι αναφέρονται σε λάθος χαρακτήρες. Αν για παράδειγμα έχεις ο client έχει ελληνικό locale το ελληνικό Α είναι το 193. Σε ένα μηχάνημα με αγγλικό locale όμως το ASCII 193 αντιστοιχεί στο Á. Όταν εσύ αλλάξεις τον τύπο του πεδίο από varchar σε nvarchar ο SQL Server θα δεί ότι ζητάς το αγγλικό ASCII 193 να γίνει Unicode, δηλαδή Á. Όταν αποθηκεύεις ένα string στον SQL Server ο OLEDB driver προσπαθεί να αποφύγει αυτό το πρόβλημα μετατρέποντας τα ASCII codes από το locale του μηχανήματος σε αυτό της βάσης. Αν από ένα μηχάνημα με αγγλικό locale στείλεις το ελληνικό Α σε βάση με αγγλικό locale, δεν θα γίνει μετατροπή και αυτό που θα αποθηκευθεί θα είναι το Á. Αν το locale των μηχανημάτων διαφέρει ο OLEDB Driver θα προσπαθήσει να κάνει τη μετατροπή. Αν η μετατροπή δεν γίνεται γιατί δεν υπάρχει αντιστοιχία θα αποθηκεύσει ??.

    Αν τα ??? εμφανίζονται μέσα στη βάση είναι πολύ πιθανό ότι το πρόβλημα δημιουργήθηκε κατά την αποθήκευση των δεδομένων και τα strings έχουν χαθεί. Αν εμφανίζονται μόνο όταν τα διαβάζεις από τη βάση σημαίνει ότι υπάρχει ασυμβατότητα μεταξύ των locale της βάσης και του client μηχανήματος.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  24-12-2009, 14:23 56064 σε απάντηση της 56062

    Απ: Πρόβλημα με ελληνικά σε Windows 7 + SqlExpress 2008 + Non-unicode Application

    Παναγιώτη, σ'ευχαριστώ, ήσουν κατατοπιστικότατος.

    Το πρόβλημα ήταν το locale του client. Δεν ήταν δηλωμένα τα ελληνικά...
    Και πέρασα από τη συγκεκριμένη ρύθμιση 8.657 φορές και δεν το έβλεπα ότι ήταν Αγγλικά (ΗΠΑ).

    Ναι, ντρέπομαι...

    In dark places we will be
    forever beyond the light
    In dark places we will be free
    from the pain that fills our lives
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems