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

 

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

ΕΦΑΡΜΟΓΗ ΜΕ SQL SERVER και πρόβλημα με ελληνικούς χαρακτήρες...

Îåêßíçóå áðü ôï ìÝëïò paolo75gr. Τελευταία δημοσίευση από το μέλος George J. Capnias στις 07-06-2013, 09:11. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-06-2013, 14:16 72747

    ΕΦΑΡΜΟΓΗ ΜΕ SQL SERVER και πρόβλημα με ελληνικούς χαρακτήρες...

    Καλησπέρα στην κοινότητα

    Έχω ένα πρόβλημα έχω φτιάξει ένα πρόγραμμα με βάση δεδομένων σαν πελατολόγιο (λογιστής γάρ) με κωδικούς για το taxisnet και το ΙΚΑ

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

    αλλα επειδή είμαι αρχάριος στον προγραμματισμό κάποια παράμετρο έχω κάνει λάθος.

    το προγραμματάκι αυτό θα εγκατασταθεί σε δυο διαφορετικούς υπολογιστές .

    σε αυτούς τους υπολογιστές υπάρχει  SQLserver 2005 και  2008 λόγο των προγραμμάτων λογιστικής που χρησιμοποιώ .

    σας ευχαριστώ για το χρόνο σας

    και τις απαντήσεις σας. 

  •  04-06-2013, 21:03 72752 σε απάντηση της 72747

    Απ: ΕΦΑΡΜΟΓΗ ΜΕ SQL SERVER και πρόβλημα με ελληνικούς χαρακτήρες...

    Αυτό που λένε και τα προηγούμενα posts είναι ότι το λάθος είναι στην ίδια την εφαρμογή και όχι στον SQL Server ή σε κάποια παράμετρο. Έχεις ορίσει varchar αντί για nvarchar πεδία και αποθηκεύεις ASCII χαρακτήρες αντί για Unicode. Κατά πάσα πιθανότητα αντί να χρησιμοποιείς parameterized queries φτιάχνεις το SQL statement μέσα στον κώδικα με αποτέλεσμα τα δεδομένα να πηγαίνουν στον server ως ASCII. Τα ??? είναι το αποτέλεσμα όταν ο OLEDB Driver προσπαθεί να μετατρέψει κείμενο από ένα codepage σε άλλο και αποτυγχάνει.

     Η λύση είναι η ίδια όπως και στα προηγούμενα posts. Άλλαξε τον τύπο των πεδίων σε nvarchar, στείλε Unicode δεδομένα και χρησιμοποίησε parameterized queries αντί για χειροποίητα sql statements. Ακόμα καλύτερα, χρησιμοποίησε κάποιο ORM το οποίο θα φροντίσει να φτιάξει τα κατάλληλα statements από μόνο του.

    Επαναλαμβάνω, το πρόβλημα δεν οφείλεται στον SQL Server. Το ίδιο ακριβώς πρόβλημα θα είχες με οποιαδήποτε βάση, σε οποιοδήποτε λειτουργικό - είτε αυτό λέγεται SQL Server πάνω από Windows, είτε Oracle πάνω από Unix.

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-06-2013, 00:20 72755 σε απάντηση της 72752

    Απ: ΕΦΑΡΜΟΓΗ ΜΕ SQL SERVER και πρόβλημα με ελληνικούς χαρακτήρες...

    Καλησπέρα και ευχαριστώ για το χρόνο σου 

    στα παιδιά της βάσης όπου χρειάζεται έχω βάλει nvchar και όχι vchar το πρόβλημα παραμένει

    πιθανότατα καθότι και άσχετος στο θέμα θα πρέπει να γίνει και κάποια αναβάθμιση της sql αλλά και παραμετροποίηση όπως λες . Μακάρι να μπορέσω να την κάνω να δουλέψει.

     

  •  05-06-2013, 10:41 72758 σε απάντηση της 72755

    Απ: ΕΦΑΡΜΟΓΗ ΜΕ SQL SERVER και πρόβλημα με ελληνικούς χαρακτήρες...

    Και πως στέλνεις τα string στη βάση? Αν φτιάχνεις το sql statement με το χέρι και θέτεις π.χ. SomeField ='ΑΒΓΔ' η τιμή θα περάσει ως ASCII. Για να περάσει ως Unicode θα πρέπει να γράψεις SomeField=N'ΑΒΓΔ'.

    Αυτό όμως είναι κακή λύση, γιατί τα sql statements με το χέρι σε αφήνουν ορθάνοιχτο σε sql injection attacks και είναι και πιο αργά. Για φαντάσου να βάλει κάποιος ως τιμή σε κάποιο πεδίο το ';DROP TABLE xxx;-- 

    Είναι πολύ απλό να φτιάξεις ένα parameterized query, μάλιστα είναι ευκολότερο από το να φτιάξεις το statement με το χέρι. Υπάρχουν πολλά posts εδώ και αλλού που δείχνουν πως να το κάνεις. Δες π.χ. το Give me parameterize SQL or give me death". Αν έχεις δύο ή παραπάνω παραμέτρους να περάσεις είναι σίγουρα πολύ ευκολότερο.

    Άλλο ένα πλεονέκτημα είναι ότι όταν περνάς αριθμητικές παραμέτρους δεν σε απασχολεί η μορφή της υποδιαστολής. Αν φτιάχνεις το statement με το χέρι όμως, πάντα θα πρέπει να φροντίσεις η υποδιαστολή να είναι αυτή που περιμένει η βάση - με άλλα λόγια κλάφτα.

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-06-2013, 13:45 72761 σε απάντηση της 72758

    Απ: ΕΦΑΡΜΟΓΗ ΜΕ SQL SERVER και πρόβλημα με ελληνικούς χαρακτήρες...

    Καλημέρα σας ευχαριστώ όλους για τις απαντήσεις σας

    θα κάνω μια αναφορά του σχεδιασμού της εφαρμογής που δημιούργησα για να δω που 

    κάνω το λάθος.

    1. Δημιουργία φορμών που θα κάτσει αργότερα η βάση

    2. δημιουργία της βάσης με χαρακτηριστικά στο nvachar(MAX) με collation Greek_BIN στα παιδιά που θέλω να αναγνωρίζει τα ελληνικά (επώνυμο, όνομα, διεύθυνση, κτλ) 

    3.τοποθέτηση των πεδίων της βάσης στις φόρμες

    Λογικά θα έπρεπε να αναγνωρίζει τους ελληνικούς χαρακτήρες η βάση γνωρίζεται αν πρέπει εκτος απο κωδικά που πρέπει να γραφτεί, αν οι ρυθμίσεις που έχω κάνει είναι σωστές.

  •  05-06-2013, 16:44 72766 σε απάντηση της 72761

    Απ: ΕΦΑΡΜΟΓΗ ΜΕ SQL SERVER και πρόβλημα με ελληνικούς χαρακτήρες...

    Τί εννοείς "Τοποθέτηση των πεδίων της βάσης στις φόρμες"? Πως διαβάζεις τα δεδομένα και κυρίως, πως τα γράφεις? Καταρχήν, για ποιά γλώσσα μιλάμε? 

    Επιπλέον, το nvarchar(MAX) χρησιμοποιείται όταν θέλεις να αποθηκεύσεις πολύ μεγάλα κείμενα.  To collation δεν έχει σημασία αν αποθηκεύεις Unicode. Προφανώς αυτά που στέλνεις στη βάση δεν είναι Unicode.

    Δείξε τον κώδικα που χρησιμοποιείς για να γράψεις, μήπως βγει κάποια άκρη 


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  07-06-2013, 09:11 72893 σε απάντηση της 72761

    Απ: ΕΦΑΡΜΟΓΗ ΜΕ SQL SERVER και πρόβλημα με ελληνικούς χαρακτήρες...

    paolo75gr:

    Λογικά θα έπρεπε να αναγνωρίζει τους ελληνικούς χαρακτήρες η βάση γνωρίζεται αν πρέπει εκτος απο κωδικά που πρέπει να γραφτεί, αν οι ρυθμίσεις που έχω κάνει είναι σωστές.

    Δυστηχώς δεν δουλεύει ακριβώς έτσι - πχ η php στα windows δεν έχει πλήρη υποστήριξη Unicode σε αντιθεση με ένα Unix κουτί. Έτσι ο ίδιος κώδικας, μεταφερόμενος από το ένα κουτί στο άλλο, δεν φέρνει τα ίδια αποτελέσματα στην βάση.

    Δεν αρκεί μόνο η βάση για να γράψεις ελληνικά, και σίγουρα δεν είναι "πρόβλημα" του κακού SQL Server - τις περισσότερες φορές, ειδικά σε περιβάλλοντα που ο κώδικας δεν κάνει compile - .asp sites, .php sites - παίζει ρόλο και το encoding των αρχείων που γράφεις τον κώδικα, η default κωδικοσελίδα του λογαριασμού που τρέχει το application, και άλλα πραγματάκια που "ανακατεύουν με το δαχτυλάκι" τους την κατάσταση.

      

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems