Description de stockage de données UTF-8 dans SQL Server

Résumé

Certaines applications (en particulier ceux qui sont sur le Web) doivent gérer les données Unicode qui sont codées à l’aide de la méthode de codage UTF-8. SQL Server 7.0 et SQL Server 2000 utilisent un codage de Unicode différent (UCS-2) et ne reconnaissent pas le format UTF-8 en tant que données de type caractère valide. Cet article explique certaines options pour remédier à cette situation.

Plus d'informations

Données Unicode peuvent être codées de différentes façons. UCS-2 et UTF-8 sont les deux méthodes courantes pour stocker les modèles de bits qui représentent les caractères Unicode. Microsoft Windows NT, SQL Server, Java, COM et le pilote ODBC de SQL Server et fournisseur OLEDB tous les représentent en interne les données Unicode UCS-2.

Les options d’utilisation de SQL Server 7.0 ou SQL Server 2000 comme un serveur principal d’une application qui envoie et reçoit les données Unicode qui sont codées au format UTF-8 sont les suivantes :

  1. Si votre application utilise Active Server Pages (ASP) et si vous utilisez Internet Information Server (IIS) 5.0 et Microsoft Windows 2000, vous pouvez ajouter « < % Session.Codepage=65001 % > » à votre script ASP côté serveur. Cela indique à IIS de convertir toutes les chaînes générées de manière dynamique (exemple : Response.Write) à partir de UCS-2 enUTF-8 automatiquement avant de les envoyer au client.

    Si vous ne souhaitez pas activer les sessions, vous pouvez également utiliser la directive SSI « < % @ page de codes 65001 = > ».

    Toutes les données UTF-8 envoyées du client au serveur via GET ou POST sont également converties en UCS-2 automatiquement. La propriété Session.Codepage est la méthode recommandée pour gérer des données UTF-8 au sein d’une application web. Ce paramètre de page de codes n’est pas disponible sur IIS 4.0 et de Windows NT 4.0. Pour plus d’informations, consultez l’article suivant dans la Base de connaissances Microsoft :
    Message d’erreur 254313 : Active Server Pages d’erreur ' ASP 0203' Code non valide
  2. Traduire vers et à partir de UCS-2 ou UTF-8 en fonction de l’application. Exemples de code pour ce type de conversion se trouve sur le site du Unicode Consortium :

    Vous trouverez une description détaillée de l’algorithme de conversion UCS-2 au format UTF-8 dans le document de demande de commentaires Internet RFC2279.

    Sous Windows NT ou Windows 2000, vous pouvez utiliser les fonctions Win32 MultiByteToWideChar et WideCharToMultiByte pour convertir UTF-8 vers et à partir de UCS-2, en passant la constante CP_UTF8 (65001) comme premier paramètre dans les fonctions.
  3. Modifier l’application pour utiliser UCS-2 au lieu de l’encodage UTF-8.
  4. Stocker les données UTF-8 sur le serveur en utilisant les colonnes BINARY ou VARBINARY/IMAGE. Stockage de données UTF-8 sur SQL Server signifie que vous ne pouvez pas utiliser SQL Server pour trier ou rechercher des plages de ces valeurs comme si les données étaient des données de type caractère valide. Les types d’opérations sur des colonnes contenant des données UTF-8 qui ne retournent pas les résultats attendus sont « ORDER BY », plus-que « > » et inférieur-que « < » les comparaisons et les fonctions de manipulation de chaîne intégrées de SQL Server comme SUBSTRING().

    Toutefois, les comparaisons d’égalité, fonctionnera tant que les chaînes comparées sont équivalents à un niveau d’octets. Notez que si vous stockez des données UTF-8 dans SQL Server vous devez utiliser pas des colonnes de type caractère (CHAR/NCHAR/VARCHAR et ainsi de suite). UTF-8 n’est pas les données de caractère valide à SQL Server et en stockant des données de type caractère non dans les colonnes de caractères que vous risquez de rencontrer des problèmes, tels que les problèmes décrits dans les articles suivants de la Base de connaissances Microsoft :
    155723 INF : SQL Server la troncature d’une chaîne DBCS
    234748 PRB : pilote ODBC de SQL Server convertit des événements de langage en Unicode
    Si vous envisagez d’utiliser cette option, gardez à l’esprit que si vous avez besoin d’accéder aux données UTF-8 stockées à l’intérieur de SQL Server à partir de n’importe quelle application autre qu’un navigateur Web (par exemple, à partir d’une application de ODBC non basé sur Web) vous devez faire une conversion UTF-8 à UCS-2 dans cette application ODBC, OLEDB, COM, les appels API Win32, VB et C les fonctions de manipulation de chaîne runtime ne fonctionnent pas avec des données UTF-8. Cette opération déplace la charge de la conversion vers une autre application.
  5. Si vos exigences ne comprennent pas la nécessité de stocker les données à partir d’une combinaison de langues qui ne peut pas être satisfaite par une seule page de code, vous devrez pas utiliser Unicode.
Prise en charge Unicode a été introduit dans SQL Server à partir de SQL Server 7.0. Dans la mesure où SQL Server 6.5 ne gère pas le stockage de données Unicode, les seules options pour SQL Server 6.5 sont présentées dans les étapes 4 et 5.
Propriétés

ID d'article : 232580 - Dernière mise à jour : 8 janv. 2017 - Révision : 1

Commentaires