Partager via


Traduction automatique de données caractères

Les données de caractères, telles que les variables de caractères ANSI déclarées avec des SQL_C_CHAR ou des données stockées dans SQL Server à l’aide des types de données char, varchar ou texte, ne peuvent représenter qu’un nombre limité de caractères. Les données caractères stockées à l'aide d'un octet par caractère ne peuvent représenter que 256 caractères. Les valeurs stockées dans les variables SQL_C_CHAR sont interprétées à l'aide de la page de codes ANSI (ACP) de l'ordinateur client. Les valeurs stockées à l’aide de types de données char, varchar ou text sur le serveur sont évaluées à l’aide de l’ACP du serveur.

Si le serveur et le client ont le même ACP, ils n’ont aucun problème lors de l’interprétation des valeurs stockées dans des objets SQL_C_CHAR, char, varchar ou texte . Si le serveur et le client ont des points de contrôle d’accès différents, les données SQL_C_CHAR du client peuvent être interprétées comme un caractère différent sur le serveur si elles sont utilisées dans des colonnes, variables ou paramètres de texte, ou char, varchar ou texte. Par exemple, un octet de caractère contenant la valeur 0xA5 est interprété comme le caractère ?? sur un ordinateur utilisant la page de codes 437 et est interprété comme le signe yen (??) sur un ordinateur exécutant la page de codes 1252.

Les données Unicode sont stockées à l'aide de deux octets par caractère. Tous les caractères étendus étant couverts par la spécification Unicode, tous les caractères Unicode sont interprétés de la même façon par tous les ordinateurs.

La fonctionnalité Detranslate automatique du pilote ODBC SQL Server Native Client tente de réduire les problèmes liés au déplacement des données de caractères entre un client et un serveur qui ont des pages de codes différentes. AutoTranslate peut être défini dans la chaîne de connexion de SQLDriverConnect, dans la chaîne de configuration de SQLConfigDataSource ou lors de la configuration de sources de données pour le pilote ODBC SQL Server Native Client à l’aide de l’administrateur ODBC.

Lorsque AutoTranslate est défini sur « non », aucune conversion n’est effectuée sur les données déplacées entre SQL_C_CHAR variables sur le client et les colonnes, variables ou paramètres char, varchar ou texte dans une base de données SQL Server. Les modèles binaires peuvent être interprétés différemment sur les ordinateurs client et serveur si les données contiennent des caractères étendus et que les deux ordinateurs ont des pages de codes différentes. Les données seront interprétées de la même façon si les deux ordinateurs ont la même page de codes.

Lorsque AutoTranslate est défini sur « oui », le pilote ODBC SQL Server Native Client utilise Unicode pour convertir les données déplacées entre SQL_C_CHAR variables sur le client et les colonnes, variables ou paramètres char, varchar ou texte dans une base de données SQL Server :

  • Lorsque des données sont envoyées à partir d’une variable SQL_C_CHAR sur le client vers une colonne, une variable ou un paramètre char, varchar ou texte dans une base de données SQL Server, le pilote ODBC effectue d’abord la conversion de SQL_C_CHAR en Unicode à l’aide de l’ACP du client, puis d’Unicode en caractère à l’aide de l’ACP du serveur.

  • Lorsque des données sont envoyées à partir d’une colonne, d’une variable ou d’un paramètre char, varchar ou text dans une base de données SQL Server à une variable SQL_C_CHAR sur le client, le pilote ODBC SQL Server Native Client convertit d’abord le caractère en Unicode à l’aide de l’ACP du serveur, puis d’Unicode en SQL_C_CHAR à l’aide de l’ACP du client.

Étant donné que toutes ces conversions sont effectuées par le pilote ODBC SQL Server Native Client s’exécutant sur le client, le serveur ACP doit être l’une des pages de codes installées sur l’ordinateur client.

Le fait d'effectuer les conversions de caractères via Unicode garantit une conversion correcte de tous les caractères qui existent dans les deux pages de codes. Si, toutefois, un caractère existe dans une page de codes mais pas dans une autre, le caractère ne peut pas être représenté dans la page de codes cible. Par exemple, la page de codes 1252 a le symbole de marque déposée (??), contrairement à la page de codes 437.

Le paramètre AutoTranslate n'a aucun effet sur ces conversions :

  • Déplacement de données entre des variables clientes SQL_C_CHAR caractères et des colonnes, variables ou paramètres Unicode nchar, nvarchar ou ntext dans des bases de données SQL Server.

  • Déplacement de données entre des variables clientes Unicode SQL_C_WCHAR et des colonnes, variables ou paramètres caractères, varchar ou texte dans des bases de données SQL Server.

Les données doivent toujours être converties lorsqu'elles sont déplacées du type caractère vers le type Unicode.

Voir aussi

Traitement des résultats (ODBC)
Prise en charge d'Unicode et du classement