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

 

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

προβλημα με encoding σε inserting into sql server

Îåêßíçóå áðü ôï ìÝëïò gtk. Τελευταία δημοσίευση από το μέλος spaceman στις 06-04-2007, 12:44. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-04-2007, 13:48 27896

    προβλημα με encoding σε inserting into sql server

        γεια σας,
    εχω μια πλατφορμα φωνης , και θελω η πλατφορμα μου να γεμισει ενα πινακα σε sql server 2005 που βρισκεται remotely  σε αλλο υπολογιστη. Το προβλημα ειναι οτι το table γεμιζει με τετραγωνακια οταν παω να γεμισω με ελληνικα τη βάση. 
    Αυτο που ηθελα να ρωτησω ειναι αν μπορω να αλλαξω κατι απο τον sql server σε σχεση με encodings κλπ.

    Το περιεργο ειναι οτι μια Access βαση τη γεμιζω κανονικα με ελληνικα γραμματα.
    Καμια ιδεα?
  •  04-04-2007, 14:36 27899 σε απάντηση της 27896

    Απ: προβλημα με encoding σε inserting into sql server

    Το πρόβλημα δεν έχει σχέση με τον SQL Server αλλά με το πως έχεις γράψει την εφαρμογή σου. Αν έχεις κάνει το σωστό και αποθηκεύεις τα κείμενα σε πεδία nvarchar, αυτά αποθηκεύονται σαν Unicode οπότε δεν υπάρχει θέμα encoding. Αν χρησιμοποιείς varchar (κακό, γιατί να το κάνεις αυτό?) το τί θα δεις εξαρτάται από το locale του υπολογιστή που αποθήκευσε τα στοιχεία, του collation των πεδίων του πίνακα, και του locale του υπολογιστή που τα διαβάζει. Γι αυτό καλό είναι να μην χρησιμοποιείς varchar πεδία.

    Από εκεί και πέρα, εξαρτάται από την εφαρμογή σου, σε τί είναι γραμμένη και αν χειρίζεται σωστά τους Unicode χαρακτήρες. Τα strings του .ΝΕΤ είναι πάντα unicode. Οι εφαρμογές Winforms δεν έχουν κανένα πρόβλημα. Στις εφαρμογές ASP.NET, μπορεί να δημιουργηθεί πρόβλημα αν μπει "καρφωτό" λάθος encoding στη σελίδα (γι αυτό πολλές φορές χρειάζεται να αλλάξεις το encoding από το μενού View). Οι εφαρμογές VB6 χειρίζονται τα strings σαν Unicode πάντα, αλλά τα controls είναι ANSI και θα δείξουν σωστά το κείμενο μόνο στη γλώσσα που έχει επιλέξει ο χρήστης ως locale (π.χ. ελληνικά) ή στα αγγλικά.
    Αν η εφαρμογή σου είναι σε C++ θα πρέπει να χρησιμοποιεί TCHAR ή WCHAR, και να έχει γίνει compile με υποστήριξη Unicode.

    Επειδή η ερώτηση που κάνεις έχει γίνει πάρα πολλές φορές ως τώρα, έχω γράψει και ένα blog post, "Ο SQL Server δεν χρειάζεται κόλπα για να υποστηρίξει ελληνικά". Το συμπέρασμα είναι ότι αν αποθηκεύεις σε nvarchar πεδία δεν θα έχεις πρόβλημα. Αλλιώς, θα πρέπει να λάβεις υπόψη τόσο την γλώσσα του χρήστη που εισάγει τα δεδομένα, του χρήστη που τα διαβάζει και το collation των πινάκων.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-04-2007, 14:45 27900 σε απάντηση της 27896

    Απ: προβλημα με encoding σε inserting into sql server

    Εμ ...ναι μπορείς ....

    Ο SQL Server 2005 υποστηρίζει γλώσσες στo Advanced από τα Server Properties. Επίσης αν πάς στο Database Properties της βάσης που θέλεις να πειράξεις και από εκει στα Options αλλάζεις το collation βάλε κάποιο σε ελληνικό π.χ Greek_CI_AS. Λογικά δεν πρέπει να σου αλλάξει τα δεδομένα που ήδη έχεις περάσει αν και δεν το εχώ δοκιμάσει στον 2005.

    Αν παρολαυτά έχεις πρόβλημα πάλι τα ξαναλέμε..!!!


    Πάντω ποτέ δεν έχω αντιμετωπίσει πρόβλημα με ελληνικά όπως και αν έχω βάλει τους τύπους ότι και αν εχω κάνει !!!!!




  •  04-04-2007, 19:22 27917 σε απάντηση της 27900

    Απ: προβλημα με encoding σε inserting into sql server

    Vader, αυτό που λες είναι λάθος. Η αλλαγή των collation του server ή της βάσης, δεν θα έχουν κανένα απολύτως αποτέλεσμα. Αυτά χρησιμοποιούνται απλά ως defaults για την δημιουργία των αντικειμένων που περιέχουν. Έτσι και δημιουργηθεί ένας πίνακας, το collation του δεν επηρεάζεται από την αλλαγή του collation του server ή της βάσης. Η ίδια σχέση υπάρχει και μεταξύ πίνακα και των πεδίων του. Θα πρέπει να αλλάξει το collation του πεδίου varchar σε κάποιο ελληνικό, όχι του server ή της βάσης. Αυτό όμως είναι πολύ φασαρία, γι αυτό και δεν έχει νόημα να χρησιμοποιεί κανείς varchar.

    Αν πρέπει κανείς για κάποιο περίεργο λόγο να χρησιμοποιήσει varchar, θα πρέπει το πεδίο varchar να έχει ελληνικό collation. Αν ο server ή η βάση έχουν ήδη ελληνικό collation, δεν υπάρχει πρόβλημα καθώς αυτό θα χρησιμοποιηθεί ως default. Αλλιώς πρέπει να οριστεί ότι το collation του πεδίου είναι ελληνικό.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-04-2007, 09:21 27952 σε απάντηση της 27917

    Απ: προβλημα με encoding σε inserting into sql server

    Είναι πολύ φασαρία να αλλάξεις το collation της βάσης ? ...ΟΚ !!! Από εκεί και πέρα το να θέλε re create ο πίνακας είναι λογικό ...

    Εγώ στους servers βάζω τις ρυθμίσεις που είπα πριν και ΠΟΤΕ δεν είχα πρόβλημα με ελληνικά και με ΤΕΡΑΣΤΙΕΣ ΒΑΣΕΙΣ και διάφορους τύπους δεδομένων.
    Από εκεί και πέρα δεν σχολιάζω παραπάνω !!! Zip it!
  •  05-04-2007, 10:20 27953 σε απάντηση της 27952

    Απ: προβλημα με encoding σε inserting into sql server

    Ευχαριστώ για τις απαντήσεις .
    Τα fields της βάσης που θελω να γεμιζω ειναι nvarchar,
    τo OS και τα regional settings των δυο υπολογιστων ειναι ιδια.
    Αυτο που θα συμβαινει λογικα ειναι να μη στελνει η πλατφορμα με σωστο encoding τα δεδομενα στη βάση . Σωστά?
    Εστω οτι τα στοιχεια στη πλατφορμα αποθηκευονται σε ANSi ( ASCII) . Τοτε, πρεπει να κανω "convert ansi to unicode " και υστερα να τα στειλω στη βάση?
    Επισης στις συναρτησεις μετατροπης που εχει, πρεπει να ορισω το codepage( πχ $CodePageAnsi, 1250 (European codepage), $CodePageUTF8, $CodePageUTF7). Ποιο πρεπει να επιλεξω απο αυτα και τι σημαινουν ολα αυτα?

    Ευχαριστω
  •  06-04-2007, 12:44 28084 σε απάντηση της 27953

    Απ: προβλημα με encoding σε inserting into sql server

    Εφοσον τα πεδία είναι nvarchar, οι ελληνικοι χαρακτηρες μπορουν να αποθηκευτουν σωστα χωρις να εξαρτωνται απο το Collation του εκαστοτε πεδιου.

    Ωστοσο υπαρχει και αυτο το αναθεματισμενο N' ' (λατινικο N) που ξεχναμε πολλες φορες και κανει την ζωη μας δυσκολη!!

    Δοκιμασε τον παρακατω κωδικα στον QAnalyzer και θα δεις την διαφορα :

    declare @tmp table (fld nvarchar(100))

    insert into @tmp values('αυτο ειναι ενα τεστ')

    insert into @tmp values(N'αυτο ειναι το δευτερο τεστ')

    select * from @tmp

    --HTH--

     

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems