Περιγραφή για την αποθήκευση δεδομένων UTF-8 στον SQL Server

Σύνοψη

Ορισμένες εφαρμογές (ιδίως εκείνα που με βάση το Web) πρέπει να χειριστείτε δεδομένα Unicode που είναι κωδικοποιημένα με τη μέθοδο κωδικοποίησης UTF-8. SQL Server 7.0 και τον SQL Server 2000 για να χρησιμοποιήσετε μια διαφορετική κωδικοποίηση Unicode (UCS-2) και δεν αναγνωρίζουν UTF-8 ως έγκυρος χαρακτήρας δεδομένα. Αυτό το άρθρο ασχολείται με ορισμένες επιλογές για την αντιμετώπιση αυτής της κατάστασης.

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

Δεδομένα Unicode μπορούν να κωδικοποιηθούν με πολλούς διαφορετικούς τρόπους. UCS-2 και UTF-8 είναι δύο συνηθισμένοι τρόποι για την αποθήκευση μοτίβων bit που αναπαριστούν χαρακτήρες Unicode. Microsoft Windows NT, SQL Server, Java, COM, και το πρόγραμμα οδήγησης SQL Server ODBC και η υπηρεσία παροχής OLEDB όλα είναι εσωτερικά δεδομένα Unicode UCS-2.

Οι επιλογές για τη χρήση του SQL Server 7.0 ή SQL Server 2000 ως διακομιστή υποστήριξης για μια εφαρμογή που στέλνει και λαμβάνει δεδομένα Unicode που κωδικοποιούνται ως UTF-8 περιλαμβάνουν:

  1. Εάν η εφαρμογή σας χρησιμοποιεί Active Server Pages (ASP) και χρησιμοποιείτε το Internet Information Server (IIS) 5.0 και Microsoft Windows 2000, μπορείτε να προσθέσετε το "< % Session.Codepage=65001% >" δέσμη ενεργειών ASP πλευράς διακομιστή. Αυτό καθοδηγεί τις υπηρεσίες IIS για να μετατρέψετε όλες τις συμβολοσειρές που δημιουργήθηκε δυναμικά (παράδειγμα: Response.Write) από το UCS-2 σε UTF-8 αυτόματα πριν από την αποστολή τους στον υπολογιστή-πελάτη.

    Εάν δεν θέλετε να ενεργοποιήσετε τις περιόδους λειτουργίας, μπορείτε να χρησιμοποιήσετε εναλλακτικά οδηγία διακομιστή "< % @ CodePage = 65001% >".

    Οποιαδήποτε UTF-8 δεδομένα που αποστέλλονται από τον υπολογιστή-πελάτη στο διακομιστή μέσω GET ή POST επίσης μετατρέπονται αυτόματα σε UCS-2. Η ιδιότητα Session.Codepage είναι η προτεινόμενη μέθοδος χειρισμού UTF-8 δεδομένα μέσα σε μια εφαρμογή web. Αυτή η ρύθμιση κωδικοσελίδα δεν είναι διαθέσιμη για τις υπηρεσίες IIS 4.0 και τα Windows NT 4.0. Για περισσότερες πληροφορίες, ανατρέξτε στο ακόλουθο άρθρο της Γνωσιακής Βάσης της Microsoft:
    254313 μήνυμα λάθους: Active Server σελίδες σφάλματος ' ASP 0203' μη έγκυρος κώδικας
  2. Μετάφραση από UCS-2 ή UTF-8 και κατάλληλα μέσα στην εφαρμογή. Δείγμα κώδικα για αυτόν τον τύπο μετατροπής που βρίσκεται στην τοποθεσία της Unicode Consortium:

    Μπορείτε να βρείτε μια περιγραφή υψηλού επιπέδου της τον αλγόριθμο για τη μετατροπή UCS-2 σε UTF-8 στο έγγραφο αίτησης Internet για τα σχόλια RFC2279.

    Στα Windows NT ή Windows 2000, μπορείτε να χρησιμοποιήσετε τις συναρτήσεις Win32 MultiByteToWideChar και WideCharToMultiByte για τη μετατροπή από UCS-2 και UTF-8, μεταφέροντας τη σταθερά CP_UTF8 (65001) ως η πρώτη παράμετρος με τις λειτουργίες.
  3. Τροποποίηση στην εφαρμογή να χρησιμοποιήσει UCS-2 αντί για κωδικοποίηση UTF-8.
  4. Αποθηκεύσετε τα πραγματικά δεδομένα UTF-8 στο διακομιστή χρησιμοποιώντας τις στήλες ΔΥΑΔΙΚΌ/VARBINARY ΕΙΚΌΝΑ. Αποθήκευση δεδομένων UTF-8 στον SQL Server σημαίνει ότι δεν μπορείτε να χρησιμοποιήσετε SQL Server για να ταξινομήσετε ή να εντοπίσετε περιοχές αυτές τις τιμές δεδομένων σαν δεδομένων έγκυρος χαρακτήρας. Οι τύποι των λειτουργιών σε στήλες που περιέχουν UTF-8 δεδομένα τα οποία δεν θα επιστρέψει αποτελέσματα περιλαμβάνουν "ΚΑΤΆΤΑΞΗ ΚΑΤΆ", μεγαλύτερη-από ">" και μικρότερες-από "<" συγκρίσεις και τις ενσωματωμένες συναρτήσεις χειρισμό συμβολοσειρά SQL Server όπως SUBSTRING().

    Ωστόσο, ισότητα συγκρίσεις, θα λειτουργούν με την προϋπόθεση ότι οι συμβολοσειρές που συγκρίνονται είναι ισοδύναμες σε επίπεδο byte. Σημειώστε ότι εάν αποθηκεύετε δεδομένα UTF-8 στον SQL Server δεν πρέπει να χρησιμοποιήσετε στήλες χαρακτήρας (CHAR/NCHAR/VARCHAR και ούτω καθεξής). UTF-8 δεν είναι έγκυρος χαρακτήρας δεδομένων στον SQL Server και αποθηκεύοντας τα δεδομένα μη χαρακτήρων σε στήλες χαρακτήρων που υπάρχει κίνδυνος να συναντάτε προβλήματα όπως τα ζητήματα που περιγράφονται στα ακόλουθα άρθρα της Γνωσιακής Βάσης της Microsoft:
    155723 INF: SQL Server περικοπή συμβολοσειράς DBCS
    234748 PRB: πρόγραμμα οδήγησης SQL Server ODBC μετατρέπει τα συμβάντα γλώσσα σε Unicode
    Εάν σκοπεύετε να πραγματοποιήσετε αυτήν την επιλογή, πρέπει να έχετε υπόψη ότι, εάν ποτέ χρειαστεί να αποκτήσετε πρόσβαση σε UTF-8 δεδομένα αποθηκεύονται μέσα σε SQL Server από οποιαδήποτε εφαρμογή, εκτός από ένα πρόγραμμα περιήγησης Web (για παράδειγμα, από μια εφαρμογή ODBC δεν βασίζονται σε Web) θα πρέπει να κάνετε μετατροπή από UTF-8 UCS-2 σε αυτήν την εφαρμογή ως ODBC, OLEDB, COM, Win32 API κλήσεις, VB και C χρόνου εκτέλεσης συμβολοσειράς χειρισμό λειτουργίες δεν λειτουργούν με δεδομένα UTF-8. Αυτό σας μετακινεί το βάρος της μετάφρασης σε άλλη εφαρμογή.
  5. Εάν δεν συμπεριλάβετε την ανάγκη αποθήκευσης δεδομένων από ένα συνδυασμό γλώσσες που δεν είναι δυνατό να ικανοποιήσει μία κωδικοσελίδα τις απαιτήσεις σας, ίσως δεν χρειάζεται να χρησιμοποιήσετε Unicode.
Υποστήριξη Unicode θεσπίστηκε με τον SQL Server, ξεκινώντας με το SQL Server 7.0. Δεδομένου ότι το SQL Server 6.5 δεν υποστηρίζει την αποθήκευση δεδομένων Unicode, μόνο επιλογές για τον SQL Server 6.5 περιγράφονται στο βήμα 4 και 5.
Ιδιότητες

Αναγνωριστικό άρθρου: 232580 - Τελευταία αναθεώρηση: 8 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια