Έχουμε και λέμε (συγγνώμη προκαταβολικά για το μεγάλο post):
Πρώτα λίγη θεωρία: τo encoding-codepage είναι η 2η παράμετρος στη μεταβλητή περιβάλλοντος NLS_LANG π.χ. AMERICAN_AMERICA.
EL8ISO8859P7 To 1ο μέρος (πριν την τελεία) αφορά τη γλώσσα με την οποία θα επικοινωνεί η Oracle στα μυνήματα (λάθους, πληροφόρησης, οτιδήποτε) που στέλνει στον client. Προτείνω το AMERICAN_AMERICA μιας και τα ελληνικά υστερούν. To EL8ISO8859 στη συγκεκριμένη περίπτωση είναι το encoding και το Ρ7 είναι η κωδικοσελίδα.
Αν είσαι στο DOS, εννοείτε ότι πρέπει να θέσεις τη μεταβλητή περιβάλλοντος σε κάθε command prompt που ανοίγεις, ενώ στα windows το πρόγραμμα θα το διαβάσει από τη registry κάτω από το ORACLE_HOME που χρησιμοποιεί (κάθε εγκατάσταση by default πάει σε δικό της, εκτός κι αν το θέσεις εσύ ρητά).
Πάμε στο ζουμί:
Από τη βάση μέχρι το πληκτρολόγιο σου (που πατάς κουμπιά και μπαίνουν δεδομένα) παρεμβάλλονται:
1. client-πρόγραμμα που γίνεται η καταχώρηση των δεδομένων
2. oracle client που τα στέλνει στη βάση (χρησιμοποιεί το NLS_LANG κατά τη διασύνδεσή του με τη βάση ώστε η τελευταία να μεταφράζει σωστά τα δεδομένα που της στέλνει ο client-πρόγραμμα).
3. βάση που τα δέχεται
Για να αποθηκεύονται τα δεδομένα σωστά πρέπει ο 2 να έχει το σωστό encoding/codepage. Ήτοι, αν είσαι σε windows client (π.χ. Oracle SQL Developer, TOAD, PL/SQL Developer ή οποιαδήποτε windows εφαρμογή γράψετε στο σχολείο) τότε - πιθανότατα - γράφεις σε Win1253 και μια χαρά επίσης θα μπορείς να γράψεις και ISO8859P7. Για να έχεις ορίσει το κατάλληλο encoding θα βάλεις - registry - EL8MSWin1253 στο NLS_LANG σου και είσαι κούκλος. Προσοχή, γιατί αν δε χρησιμοποιείς Windows client, π.χ. sqlplus μέσα από DOS τότε στέλνεις χαρακτήρες απέναντι, όχι σε win1253 αλλά σε DOS CP437G οπότε και χρειάζεσαι άλλο NLS_LANG (το κατάλληλο για DOS - σόρυ δεν το ξέρω και νομίζω πως υπάρχουν πολλοί καλύτεροι τρόποι για να κάνεις data entry αντί να γράφεις σε DOS παράθυρο
Αυτό είναι που θέτεις με τη μεταβλητή περιβάλλοντος που αναφέρεις στο τελευταίο σου post.)
To NLS_LANG της βάσης δε σε απασχολεί γιατί ο oracle client θα φροντίσει να κάνει - θεωρητικά - τη σωστή μετάφραση. Η πράξη λέει ότι στην περίπτωσή σου μπορείς άνετα να βάλεις EL8MSWIN1253 ή ISO8859P7 για να έχεις και οικονομία στα δεδομένα και καθόλου μετάφραση.Εννοείται ότι τα υπερσύνολα αυτών (AL32, UTF8, 16 κλπ) σε υπερκαλύπτουν, χωρίς να είναι αναγκαία.
Από τη βάση πάλι, μέχρι την οθόνη σου που βλέπεις τα δεδομένα παρεμβάλλονται:
1. βάση που τα έχει
2. oracle client που τα παίρνει από τη βάση (χρησιμοποιεί το NLS_LANG κατά τη διασύνδεσή του με τη βάση ώστε η τελευταία να μεταφράζει σωστά τα δεδομένα που στέλνει στο client-πρόγραμμα).
3. client-πρόγραμμα που χρησιμοποιεί γραμματοσειρά για να δείχνει τα δεδομένα.
Και πάλι για να μπορείς να τα βλέπεις πρέπει αφενός να ΄χεις σωστό NLS_LANG στο #2 ώστε να ΄ρχονται μέχρι τον client-πρόγραμμα σωστά αλλά και αντίστοιχη γραμματοσειρά που να μπορεί να τα δείξει αφού έρθουν. Π.χ. αν βλέπεις από windows τότε ισχύουν τα παραπάνω, ενώ αν βλέπεις από Linux χρειάζεσαι το κατάλληλο (νομίζω είναι το EL8ISO8859P7) αλλά και συμβατή γραμματοσειρά.
Για παραπάνω, δες το manual της Oracle:
http://www.oracle.com/technology/tech/globalization/htdocs/nls_lang%20faq.htmjust my 2 cents.
Συγγνώμη για την καθυστερημένη απάντηση.
ΥΓ:
kosvek έγραψε:Είμαι καθηγητής πληροφορικής και στο σχολείο μου έχω βάλει παντού Ubuntu.
Πώς έχεις βάλει παντού Ubuntu αφού όλοι βλέπουν από windows τον Oracle server;