Partager via


Traduction automatique de données caractères

Les données caractères, telles que les variables de caractère ANSI déclarées avec SQL_C_CHAR ou les données stockées dans SQL Server à l'aide des types de données char, varchar ou text, 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 sur le serveur à l'aide des types de données char, varchar ou text sont évaluées à l'aide de la page de codes ANSI du serveur.

Si le serveur et le client possèdent la même page de codes ANSI, ils peuvent sans peine interpréter les valeurs stockées dans les objets SQL_C_CHAR, char, varchar ou text. Si le serveur et client possèdent des pages de codes ANSI différentes, les données SQL_C_CHAR du client peuvent être interprétées comme un caractère différent sur le serveur s'il est utilisé dans des colonnes, des variables ou des paramètres char, varchar ou text. Par exemple, un octet 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é AutoTranslate du pilote ODBC SQL Server Native Client essaie de réduire les problèmes en déplaçant les données caractères entre un client et un serveur qui ont des pages de codes différentes. La fonctionnalité AutoTranslate peut être définie dans la chaîne de connexion de SQLDriverConnect, dans la chaîne de configuration de SQLConfigDataSource ou lors de la configuration des sources de données du pilote ODBC SQL Server Native Client à l'aide de l'administrateur ODBC.

Quand la fonctionnalité AutoTranslate est définie avec la valeur « non », aucune conversion n'est effectuée sur les données déplacées entre les variables SQL_C_CHAR du client et les colonnes, variables ou paramètres char, varchar ou text d'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 la fonctionnalité AutoTranslate est définie avec la valeur « oui », le pilote ODBC SQL Server Native Client utilise Unicode pour convertir les données déplacées entre les variables SQL_C_CHAR du client et les colonnes, variables ou paramètres char, varchar ou text d'une base de données SQL Server :

  • Lorsque les données sont envoyées d'une variable SQL_C_CHAR du client à une colonne, une variable ou un paramètre char, varchar ou text d'une base de données SQL Server, le pilote ODBC effectue d'abord la conversion de SQL_C_CHAR en Unicode à l'aide de la page de codes ANSI du client, puis d'Unicode en caractères à l'aide de la page de codes ANSI du serveur.

  • Lorsque les données sont envoyées d'une colonne, d'une variable ou d'un paramètre char, varchar ou text d'une base de données SQL Server vers une variable SQL_C_CHAR du client, le pilote ODBC SQL Server Native Client effectue d'abord la conversion de caractère en Unicode à l'aide de la page de codes ANSI du serveur, puis d'Unicode en SQL_C_CHAR à l'aide de la page de codes ANSI du client.

Comme toutes ces conversions sont effectuées par le pilote ODBC SQL Server Native Client qui s'exécute sur le client, la page de codes ANSI du serveur 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 (®), tandis que la page de codes 437 ne l'a pas.

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

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

  • Déplacement de données entre les variables Unicode clientes SQL_C_WCHAR et les colonnes, variables ou paramètres char, varchar ou text 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.