Αν είχες 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