Που δεν είναι δυνατό να μετατρέψει σωστά χαρακτήρα δεδομένων από έναν υπολογιστή-πελάτη σε ένα διακομιστή χρησιμοποιώντας το πρόγραμμα οδήγησης SQL Server ODBC, εάν η κωδικοσελίδα του προγράμματος-πελάτη διαφέρει από την κωδικοσελίδα του διακομιστή

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 234748 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Συμπτώματα

Όταν χρησιμοποιείτε το MDAC 2.1 ή νεότερη έκδοση του προγράμματος οδήγησης SQL Server ODBC (έκδοση 3.70.0623 ή νεότερη έκδοση) ή την υπηρεσία παροχής OLEDB (έκδοση 7.01.0623 ή νεότερη έκδοση), σε ορισμένες περιπτώσεις ενδέχεται να αντιμετωπίσετε μετάφραση δεδομένων χαρακτήρων από την κωδικοσελίδα του προγράμματος-πελάτη στην κωδικοσελίδα διακομιστή, ακόμα και όταν είναι απενεργοποιημένη η Autotranslation για τη σύνδεση.

Αιτία

Autotranslation δεν είναι ο μόνος μηχανισμός που μπορεί να έχει ως αποτέλεσμα την μετατροπή κωδικοσελίδας. Το πρόγραμμα οδήγησης ODBC του SQL Server 7.0 και την υπηρεσία παροχής OLEDB εισάγουν μια νέα συμπεριφορά κατά τη σύνδεση σε MSDE 1.0, SQL Server 7.0 ή νεότερες εκδόσεις είτε. Όλες οι προτάσεις SQL που αποστέλλονται ως συμβάν γλώσσας μετατρέπονται σε Unicode στον υπολογιστή-πελάτη πριν σταλούν στο διακομιστή. Το εφέ τέλος αυτού είναι παρόμοια με μια Autotranslation τη ροή από τον υπολογιστή-πελάτη στο διακομιστή μέσω μιας γλώσσας συμβάν, ανεξάρτητα από την τρέχουσα ρύθμιση Autotranslation για τη σύνδεση όλων των δεδομένων. Αυτό δεν θα δημιουργήσει δυσκολίες εκτός όταν προσπαθείτε να αποθηκεύσετε δεδομένα χαρακτήρων που δεν είναι μετάφραση από μια κωδικοσελίδα εκτός από την κωδικοσελίδα του διακομιστή SQL.

Εναλλακτικός τρόπος αντιμετώπισης

Μην αποθηκεύετε κώδικα σελίδας X δεδομένα σε μια κωδικοσελίδα Y SQL Server (για παράδειγμα, κωδικός σελίδας 950 δεδομένα στον κώδικα σελίδας 1252 διακομιστή). Ενώ αυτό ήταν δυνατό να εκτελεστεί σε ορισμένες περιπτώσεις με προηγούμενες εκδόσεις του SQL Server, πάντα έχει δεν υποστηρίζεται. Σε ένα διακομιστή SQL 1252, οτιδήποτε εκτός από ένα 1252 χαρακτήρας δεν είναι έγκυρος χαρακτήρας δεδομένων. Δεν θα ταξινομηθούν σωστά δεδομένα χαρακτήρων που δεν είναι Unicode από διαφορετική κωδικοσελίδα, και στην περίπτωση των δύο byte (DBCS) δεδομένων, SQL Server δεν θα αναγνωρίσει τα όρια των χαρακτήρων σωστά. Αυτό μπορεί να προκαλέσει σημαντικά προβλήματα, όπως το ζήτημα που περιγράφεται στο ακόλουθο άρθρο της Γνωσιακής Βάσης της Microsoft:
155723Το αρχείο INF: SQL Server περικοπή συμβολοσειράς DBCS
Η καλύτερη επιλογή για την κωδικοσελίδα του διακομιστή SQL είναι η κωδικοσελίδα των υπολογιστών-πελατών που θα έχουν πρόσβαση σε διακομιστή.

The server and client may have different code pages, but you must ensure that Autotranslation is enabled on the client so that you get proper translation of data to and from the server’s code page in all cases.

If your server must store data from multiple code pages, the supported solution is to store the data in Unicode columns (NCHAR/NVARCHAR/NTEXT).

If your situation requires that you store code page X data in a code page Y SQL Server, there are only two ways to do this reliably:
  • Store the data in binary columns (BINARY/VARBINARY/IMAGE) columns.
  • Write your application to use Remote Procedure Calls (RPCs) for all SQL statements that deal with character data. Data sent through an RPC event is not subject to this conversion. Note that there is nothing at the driver or DSN level that you can do to change the type of events being sent. Whether a command is sent as a language or RPC event depends entirely on the APIs and syntax chosen by the programmer when the application is written.

Περισσότερες πληροφορίες

Autotranslation (that is, the “Perform Translation for character data" checkboxes in newer ODBC applications) converts character data from the client code page to the server code page before sending the data to the server, using Unicode as a translation medium. However, the 3.7 SQL Server ODBC driver also converts all SQL statements sent as a language event to Unicode before placing them on the wire, which has an effect that is similar to Autotranslation but is not governed by the Autotranslation setting. In contrast, character data flowing from the server back to the clients respect the Autotranslation flag; if Autotranslation is turned off the data arrives at the client application with the same character codes as the data had on the server. Similarly, translation of data for client-to-server RPC events can be disabled by turning off Autotranslation. A simple script that demonstrates how this behavior affects language events follows. This example was run from Query Analyzer on a code page 1252 client connecting to a code page 437 server:
-- Turn Autotranslation off here.
    USE tempdb
    GO
    CREATE TABLE t1 (c1 int, c2 char(1))
    GO
    
    -- Enter a yen character, using the keystroke ALT-0165.
    INSERT INTO t1 VALUES (1, '₯') 
    SELECT c1, c2, ASCII (c2) FROM t1
c1          c2               
        ----------- ---- ----------- 
        1               157
        
        (1 row(s) affected)
Note the following about the preceding example:
  • Even though Autotranslation was off during this batch, the character code 165 (yen in code page 1252) was converted to 157 (yen in code page 437). This is because the ODBC driver converted the SQL string to Unicode before sending it the the server, so the server was able to convert it to the appropriate character for storage in code page 437.
  • When the client ran aSELECTto retrieve the data that had just been stored, the character 157 arrived non-translated at the client (157 shows up as a box "" on a code page 1252 client). This is because the conversion discussed in this article only applies to data sent from the client to the server, not from the server to the client. The data was not translated because the Autotranslation setting is off.

-- Turn Autotranslation back on before running the following batch.
    INSERT INTO t1 VALUES (2, '₯')
    SELECT c1, c2, ASCII (c2) FROM t1
c1          c2               
        ----------- ---- ----------- 
        1           ₯    157
        2           ₯    157
        
        (2 row(s) affected)
In this case, turning Autotranslation back on had no effect on the translation from the client to the server (that is, the same correct translation from character code 165 to character code 157 happened), but it did have an effect on the data retrieved from the server. Note that when theSELECTstatement is run this time (with Autotranslation on), the yen symbols display correctly in the code page 1252 application because they have been translated from character code 157 back to character code 165 by the Autotranslation mechanism.

You will see this behavior (conversion of language events to Unicode on the client) when using any SQL Server ODBC driver version 3.70 or later and connecting to SQL Server 7.0 or later. It will not occur when using older ODBC drivers, or when using the 3.7 driver to connect to SQL Server 6.5 or earlier. In addition, if you are storing your data in Unicode columns (NCHAR/NVARCHAR/NTEXT) the conversion will not be an issue.
For more information about how character data is represented in SQL Server 2005, click the following article number to view the article in the Microsoft Knowledge Base:
904803Character data is represented incorrectly when the code page of the client computer differs from the code page of the database in SQL Server 2005

Ιδιότητες

Αναγν. άρθρου: 234748 - Τελευταία αναθεώρηση: Κυριακή, 19 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Λέξεις-κλειδιά: 
kbprb kbmt KB234748 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:234748

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com