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

 

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

SQL Server 2000 - VS 2005 - Ελληνικά

Îåêßíçóå áðü ôï ìÝëïò egeorge. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 03-01-2006, 14:47. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  29-12-2005, 16:53 8236

    SQL Server 2000 - VS 2005 - Ελληνικά

    Χρησιμοποιώντας VS 2005 και C# ανέπτυξα ένα admin για εισαγωγή άρθρων. Στην βάση την οποία δουλεύω υπάρχουν tables και από άλλες εφαρμογές στις οποίες τα Ελληνικά αποθηκεύονται σωστά, με collation Latin1_General.

    Στην συγκεκριμένη εφαρμογή όμως η εισαγωγή των Ελληνικών δεν γίνετε σωστά, και οι λέξεις αποθηκεύονται με χαρακτήρες όπως «?».Δοκίμασα να αλλάξω τόσο το Collation στην βάση, όσο και το encoding της σελίδας αλλά δεν παίζει καμία λύση.


    Τι μπορώ να κάνω?

     
    Ευχαριστώ.


    Θρυλικός Προγραμματιστής
  •  30-12-2005, 10:24 8242 σε απάντηση της 8236

    Απ: SQL Server 2000 - VS 2005 - Ελληνικά

    Τα πεδία κειμένου πρέπει είναι τύπου nVarchar και όχι απλό varchar.

    Simple Photography
  •  30-12-2005, 10:35 8243 σε απάντηση της 8242

    Απ: SQL Server 2000 - VS 2005 - Ελληνικά

    Τα πεδία είναι nvarchar και ntext.
    Θρυλικός Προγραμματιστής
  •  30-12-2005, 11:47 8249 σε απάντηση της 8243

    Απ: SQL Server 2000 - VS 2005 - Ελληνικά

    Άν αποθηκεύσεις Ελληνικά από τον gui Enterprise manager σου τα δείχνει κανονικά?
    Simple Photography
  •  30-12-2005, 12:27 8253 σε απάντηση της 8249

    Απ: SQL Server 2000 - VS 2005 - Ελληνικά

    Αν κάνω εισαγωγή από το GUI του Enterprise Manager αποθηκεύονται σωστά. Αν τρέξω την stored procedure από SQL Query Analyzer υπάρχει πρόβλημα.
    Θρυλικός Προγραμματιστής
  •  31-12-2005, 13:19 8284 σε απάντηση της 8253

    Απ: SQL Server 2000 - VS 2005 - Ελληνικά

    Αν είχες collation Greek θα έπαιζε κανονικά και απο Query Analyzer. Επειδή το collation είναι Latin1, θα πρέπει να ορίσεις εσύ οτι χρησιμοποιείς unicode string (ναι, τα ntext, nvarchar δέχονται unicode data - 2 bytes ανά χαρακτήρα). Αυτό το κάνεις βάζοντας πριν από το string σου το χαρακτήρα "N". Ας δούμε καλύτερα όμως ένα παράδειγμα διαφόρων συνδυασμών και πώς μπορούν να "παίξουν":



    --Εχω φτιάξει μια database με όνομα testsfi και collation Latin1_CI_AI
    use testsfi

    --Εχω επίσης ένα table με όνομα testsfi και αυτό (ειδες φαντασία,ε; :) ) και ένα πεδίο
    --που λέγεται "name". (Εντάξει, ξέρω οτι είναι reserved word - παράδειγμα είναι!)
    --Οκ, για να μην φωνάζουν οι ειδήμονες, έχω και ένα "id" primary key autonumber πεδίο το
    --οποίο δεν το γράφω εδώ γιατί δεν απαιτείται για τα inserts.

    --Εδω έχω varchar μεταβλητή που παει να εισαχθεί σε πεδίο nvarchar.
    declare @name1 varchar(1000)
    set @name1='Σωτήρης'
    insert into testsfi(name) values (@name1)

    --Εδω έχω nvarchar μεταβλητή που παει να εισαχθεί σε πεδίο nvarchar χωρίς όμως να έχω
    --ορίσει οτι το string είναι unicode.
    declare @name2 nvarchar(1000)
    set @name2='Σωτήρης'
    insert into testsfi(name) values (@name2)

    --Εδω έχω varchar μεταβλητή που παει να εισαχθεί σε πεδίο nvarchar έχοντας ορίσει οτι
    --το string είναι unicode.
    declare @name3 varchar(1000)
    set @name3=N'Σωτήρης'
    insert into testsfi(name) values (@name3)

    --Εδω έχω nvarchar μεταβλητή που παει να εισαχθεί σε πεδίο nvarchar έχοντας ορίσει οτι
    --το string είναι unicode.
    declare @name4 nvarchar(1000)
    set @name4=N'Σωτήρης'
    insert into testsfi(name) values (@name4)

    select * from testsfi

    Τι παίρνω στο τέλος μετά από αυτά τα 4 inserts;

    1 S?t????
    2 S?t????
    3 S?t????
    4 Σωτήρης

    Τι μας δείχνει αυτό;

    Οτι θα πρέπει να έχω UNICODE τιμή σε UNICODE (nchar, nvarchar, ntext) μεταβλητή (αν τυχόν χρησιμοποιώ μεταβλητή) η οποία να πάει να μπει σε unicode πεδίο.

    Αλλιώς, παίρνω ερωτηματικάκια και άλλα τέτοια συμπαθή πραγματάκια. Τσίμπησα επίσης και αυτή τη σελίδα: http://support.microsoft.com/default.aspx?scid=kb;%5BLN%5D;239530 η οποία λέει ακριβώς αυτό.

    Αρα το συμπέρασμα είναι:

    1. Αν δίνεις τιμές σε ntext, nchar, nvarchar μεταβλητές, χρησιμοποιησε το πρόθεμα "N" πριν από τα strings που χρησιμοποιείς.
    2. Αν χρησιμοποιείς μεταβλητές για να αποθηκεύσεις τις τιμές πριν τις δώσεις, φρόντισε και αυτές να είναι unicode (nvarchar, nchar). Αλλιώς πάει στράφι το unicode.

    Καλή χρονιά να έχεις και εδώ είμαστε για οτιδήποτε άλλο χρειάζεσαι!

    EDIT: Από τον Enterprise Manager σου παίζει κανονικά γιατί τα controls του δέχονται απευθείας unicode τιμές και υποψιάζομαι οτι μπορεί εύκολα ο ίδιος να αποφασίσει αν χρειάζεται ASCII (single-byte) ή Unicode (double-byte) τιμές το συγκεκριμένο πεδίο για το οποίο εισάγεις την τιμή.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  31-12-2005, 15:41 8287 σε απάντηση της 8284

    Απ: SQL Server 2000 - VS 2005 - Ελληνικά

     cap wrote:
    EDIT: Από τον Enterprise Manager σου παίζει κανονικά γιατί τα controls του δέχονται απευθείας unicode τιμές και υποψιάζομαι οτι μπορεί εύκολα ο ίδιος να αποφασίσει αν χρειάζεται ASCII (single-byte) ή Unicode (double-byte) τιμές το συγκεκριμένο πεδίο για το οποίο εισάγεις την τιμή.

    Μπορείς πάντα να το τσεκάρεις τρέχοντας τον Profile Analyzer παράλληλα και να δεις τι στέλνεται πίσω στην βάση! Wink [;)]

     

    George J.

     


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  02-01-2006, 13:13 8314 σε απάντηση της 8284

    Απ: SQL Server 2000 - VS 2005 - Ελληνικά

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

    Όντως το πρόβλημα ήταν στο πέρασμα των μεταβλητών μέσω της stored procedure στα Unicode πεδία. Το διόρθωσα και τώρα παίζει σωστά.

    Με προβλημάτισε βέβαια στο θέμα αυτό και η χρήσηVS 2005, μήπως δηλαδή τίθεται θέμα ρυθμίσεων όπως π.χ. το culture στην web.config ή κάτι αντίστοιχο το οποίο δεν γνώριζα. Το αναφέρω αυτό επειδή είναι το δεύτερο project μου σε VS 2005 και δεν ήξερε αν υπάρχει τέτοιο ζήτημα. Τελικά ήταν συγκυρία….

    Ευχαριστώ, και καλή χρονιά.

    Θρυλικός Προγραμματιστής
  •  03-01-2006, 14:47 8339 σε απάντηση της 8236

    Απ: SQL Server 2000 - VS 2005 - Ελληνικά

    Σε τέτοια προβλήματα το χειρότερο που μπορείς να κάνεις είναι να αρχίσεις να τροποποιείς collations και Culture/Regional settings. Τα default settings είναι αρκετά για να κάνεις τα πάντα εκτός κι αν θέλεις να υποστηρίξεις Κινέζικα Καντόνας. Τα προβλήματα δημιουργούνται αν ξεχαστεί π.χ. το N σε ένα SQL string, αν χρησιμοποιηθούν λάθος παράμετροι, αν κάποιος έχει καρφώσει μέσα στον HTML κώδικα μιας σελίδας ένα encoding χωρίς να αλλάξει το Culture property και άλλα παρόμοια.

    Κάθε φορά που σου τυχαίνει κάτι τέτοιο, καλό είναι να δοκιμάζεις να επαναλάβεις το πρόβλημα σε ένα καινούριο, καθαρό, ΑΠΛΟ site, με μία σελίδα και τις ρυθμίσεις που υποψιάζεσαι ότι δημιούργησαν το πρόβλημα, και να τις απομονώσεις μία-μία μέχρι να βρεις τί φταίει. Διαφορετικά και χρόνο θα χάσεις, και το χειρότερο, μπορεί να μπλέξεις τον κώδικα σου και τις ρυθμίσεις και να δημιουργήσεις νέα, πολύ δυσκολότερα bug.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems