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

 

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

SQLServer 2005 και Ρυθμίσεις

Îåêßíçóå áðü ôï ìÝëïò loukas_l. Τελευταία δημοσίευση από το μέλος loukas_l στις 26-03-2008, 00:08. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  25-03-2008, 12:21 41119

    SQLServer 2005 και Ρυθμίσεις

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

    Παρόλο που υπάρχουν αυτές οι εγγραφές.

     

    Για παράδειγμα ζητάω να μου φέρει εγγραφές που το πεδίο επώνυμο να είναι «ΛΑΜΠΡΟΠΟΥΛΟΣ» και δεν φέρνει τίποτα ενώ υπάρχει. Σε αντίθεση με λατινικούς χαρακτήρες κανένα πρόβλημα όταν υπάρχει ανάλογο επώνυμο.

     

    Υπάρχει τρόπος να διορθώσω την κατάσταση χωρίς να χρειαστώ το cd του SQLServer.

     

    Ευχαριστώ.

  •  25-03-2008, 19:58 41126 σε απάντηση της 41119

    Απ: SQLServer 2005 και Ρυθμίσεις

    Ο Sql Server δεν χρειάζεται κόλπα για να υποστηρίξει τα ελληνικά .  Μπορεί άνετα να υποστηρίξει οποιαδήποτε γλώσσα, ακόμα και αραβικά, με μία default εγκατάσταση και χρησιμοποιώντας Unicode. Σχεδόν σίγουρα το πρόβλημα οφείλεται σε ένα από τρεις παράγοντες (ή και όλους):

    1. Οι πίνακες σου περιέχουν στήλες με τον ANSI τύπο (var)char αντί για τον Unicode, n(var)char.
    2. Στα query περνάς τα ελληνικά ως ANSI strings αντί για Unicode strings. Είτε φτιάχνεις SQL Strings με λάθος τρόπο, είτε περνάς τις παραμέτρους ως varchar αντί για nvarchar.
    3. Όταν δημιούργησες τη βάση όρισες ότι το collation θα είναι Case Sensitive (CS) αντί για Case Insensitive (CI). Αν δεν όρισες εσύ το collation που ήθελες να χρησιμοποιήσεις ο SQL Server χρησιμοποίησε ως default το collation που είχες ορίσει κατά την αρχική εγκατάσταση.

    Όταν φτιάχνεις ένα query πρέπει να βάζεις το λατινικό N πριν από κάθε string για να θεωρηθεί ότι το string είναι Unicode. Για παράδειγμα το SELECT * FROM MyTable WHERE NAME='ΛΑΜΠΡΟΠΟΥΛΟΣ' θεωρεί ότι το 'ΛΑΜΠΡΟΠΟΥΛΟΣ' είναι ANSI ενώ το SELECT * FROM MyTable WHERE NAME=N'ΛΑΜΠΡΟΠΟΥΛΟΣ' θεωρεί ότι είναι Unicode. Το δεύτερο query θα σου επιστρέψει πάντα το σωστό αποτέλεσμα ενώ το πρώτο μπορεί να αποτύχει αν π.χ. το μηχάνημα σου χρησιμοποιεί το αγγλικό locale.

    Όσον αφορά την τρίτη περίπτωση, στην περίπτωση που η βάση και οι πίνακες σου έχουν δημιουργηθεί με κάποιο Case Sensitive collation, δίνοντας ένα string με κεφαλαία θα πάρεις αποτελέσματα μόνο αν ο πίνακας περιέχει το όνομα σε κεφαλαία. Μπορείς να ορίσεις στο SELECT να χρησιμοποιήσει ένα συγκεκριμένο collation, π.χ. SELECT * FROM MyTable WHERE NAME=N'ΛΑΜΠΡΟΠΟΥΛΟΣ' COLLATE GREEK_CI_AS.

    Μπορείς να βρεις περισσότερα στο documentation του SQL Server και συγκεκριμένα στα κεφάλαια International Considerations for Databases and Database Engine Applications και πιο συγκεκριμένα στο Working with Collations και το Collation Precedence το οποίο μάλιστα χρησιμοποιεί για παράδειγμα ... τα ελληνικά.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  26-03-2008, 00:08 41129 σε απάντηση της 41126

    Απ: SQLServer 2005 και Ρυθμίσεις

    Σε ευχαριστώ.

     

    Ηταν το collate της βάσης. Ετσι το γύρισα σε Greek_CI_AS.

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