Fonctionnalités internationales dans Microsoft

publicité
Fonctionnalités internationales dans Microsoft SQL Server 2005
Formation des utilisateurs SQL Server
Microsoft Corporation
Février 2007
S'applique à :
Microsoft SQL Server 2005
Unicode
Résumé : Ce livre blanc présente aux développeurs Microsoft SQL Server les fonctionnalités
internationales de Microsoft SQL Server 2005. Il propose notamment une explication du
format Unicode et aborde l'ajout de la prise en charge de caractères supplémentaires dans
SQL Server 2005, les modifications du classement dans les différentes versions de
SQL Server, les modifications des types de données, les performances, les mises à jour pour
les fournisseurs de données et les nouvelles fonctionnalités de prise en charge internationales
dans SQL Server 2005 Analysis Services et SQL Server 2005 Integration Services. (75 pages
imprimées)
Sommaire
Introduction
Prise en charge du format Unicode dans SQL Server 2005
Types de données dans SQL Server 2005
Performances et espace de stockage
Migration des informations de métadonnées dans les tables système
Classements
Communications serveur-clients (technologies d'accès aux données)
Données multilingues dans l'interface utilisateur
Transact-SQL en multilingue
Prise en charge des paramètres régionaux dans SQL Server 2005
SQL Server 2005 Integration Services
Utilisation des utilitaires de ligne de commande avec les données multilingues
Fonctionnalités internationales dans SQL Server Analysis Services
Prise en charge du format XML dans SQL Server 2005
Améliorations apportées à la recherche de texte intégral
Interaction avec les autres produits de base de données
Conclusion
Remerciements
Annexe A : Suffixes de classement
Annexe B : Paramètres régionaux pris en charge dans Windows
Annexe C : Ordres de tri spécifiques à SQL
Annexe D : Langues prises en charge dans SQL Server 2005
Annexe E : Langues en texte intégral ajoutées dans SQL Server 2005
Annexe F : Classements mis à jour dans SQL Server 2005
Introduction
Microsoft SQL Server 2005 s'appuie sur la prise en charge d'Unicode et de XML introduite
dans SQL Server 2000 et y ajoute une nouvelle série puissante d'outils de développement et
de requête grâce à SQL Server Management Studio et Business Intelligence Development
Studio. Des fonctionnalités multilingues robustes font de SQL Server 2005 un produit de base
de données et une plate-forme d'applications attrayants pour la prise en charge des opérations
et des environnements au niveau international.
Ce livre blanc offre une vue d'ensemble de ces fonctionnalités dans un contexte global. Il
répertorie les fonctionnalités liées aux exigences des activités internationales et multilingues
et explique comment les décisions de conception peuvent affecter de nombreux aspects d'un
projet.
Remarque : Ce document utilise les polices internationales suivantes pour offrir des
exemples de certains caractères internationaux : Arial Unicode MS, Latha, Mangal,
PmingLiu, Gulim, SimSun et MS-Mincho. Le fait de ne pas avoir ces polices installées
n'affectera pas sérieusement l'applicabilité de ce document.
Unicode Support in SQL Server 2005
La prise en charge des caractères Unicode constitue la base de la prise en charge multilingue
dans SQL Server 2005.
Unicode est une norme créée par le Consortium Unicode, une organisation qui vise à instaurer
un jeu de caractères unique pour toutes les langues. SQL Server 2005 prend en charge la
norme Unicode version 3.2. La version 3.01 de la norme Unicode est identique à ISO-10646,
une norme internationale qui correspond à tous les points de code dans Unicode.
Unicode fournit un point de code unique pour chaque caractère, quels que soient la plateforme, le programme ou la langue. Un programme qui prend en charge Unicode peut gérer
des données dans n'importe quelle langue. Parce qu'il est conçu pour couvrir tous les
caractères de toutes les langues au monde, il n'est pas nécessaire d'utiliser des pages de code
différentes pour gérer différents jeux de caractères.
Dans la mesure où tous les systèmes Unicode utilisent de façon cohérente les mêmes schémas
de bits pour représenter tous les caractères, il existe aucun problème de conversion incorrecte
des caractères en cas de transfert d'un système à un autre.
La façon la plus simple de gérer les données de caractère dans les bases de données
internationales est toujours d'utiliser les types de données Unicode nchar, nvarchar et
nvarchar(max) plutôt que leurs équivalents non Unicode : char, varchar et text. Ainsi, les
clients voient les mêmes caractères dans les données que tous les autres clients. Si toutes les
applications qui utilisent des bases de données internationales exploitent également des
variables Unicode au lieu de variables non Unicode, il n'est pas nécessaire d'exécuter des
conversions de caractères dans le système.
Remarque : Le type de données ntext sera supprimé dans une future version de
Microsoft SQL Server.
Les points de code Unicode et les caractères qu'ils représentent sont séparés du glyphe utilisé
pour le rendu visuel. Un glyphe est défini par la norme ISO (ISO/CEI 9541-1) comme « un
symbole graphique, abstrait et reconnaissable qui est indépendant d'une conception
spécifique ». Donc, un caractère n'est pas nécessairement toujours représenté par le même
glyphe, ou même un glyphe unique. La police que vous choisissez détermine le glyphe qui
sera utilisé pour représenter un point de code ou une série de points de code particuliers.
Pour plus d'informations, consultez le site Web du consortium Unicode.
Codages
Unicode mappe des points de code sur les caractères, mais il ne spécifie pas comment les
données seront représentées dans la mémoire, dans une base de données ou sur une page Web.
C'est là que le codage des données Unicode entre en jeu. Il existe de nombreux de codages
différents pour Unicode. La plupart du temps, vous pouvez simplement choisir un type de
données Unicode sans vous soucier de ces détails. Toutefois, il est important de connaître le
codage lorsque vous êtes dans les situations suivantes :



dans le cas d'une application qui peut coder Unicode différemment ;
lors de l'envoi de données à d'autres plates-formes (autres que Microsoft Windows) ou
des serveurs Web ;
lors de l'importation de données depuis ou l'exportation de données vers d'autres
codages.
La norme Unicode définit plusieurs codages de son jeu de caractères unique : UTF-7, UTF-8,
UTF-16 et UTF-32. Cette section décrit ces codages courants :



UCS-2
UTF-16
UTF-8
Généralement, SQL Server stocke Unicode dans le schéma de codage UCS-2. Cependant, de
nombreux clients traitent Unicode dans un autre schéma de codage, tel qu'UTF-8. Ce scénario
est courant dans les applications Web. Dans les applications Microsoft Visual Basic, les
chaînes de caractères sont traitées dans le schéma de code UCS-2. Vous n'avez donc pas
besoin de spécifier explicitement les conversions de schéma de codage entre les applications
Visual Basic et une instance de SQL Server.
SQL Server 2005 code les données XML en utilisant Unicode (UTF-16). Les données d'une
colonne de type xml sont enregistrées dans un format interne sous forme de gros objets
binaires (BLOB) afin de prendre en charge les caractéristiques du modèle XML, telles que
l'ordre des documents et les structures récurrentes. C'est pourquoi les données XML
récupérées du serveur sortent en UTF-16. Si vous souhaitez un codage différent pour la
récupération de données, votre application doit exécuter la conversion nécessaire sur les
données UTF-16 récupérées. Les pratiques XML recommandées dans les Livres
SQL Server 2005 en ligne fournissent un exemple du mode de déclaration explicite d'un
codage pour les données XML récupérées d'une colonne varchar(max).
Le codage UTF-16 est utilisé parce qu'il peut gérer des caractères de 2 ou 4 octets et est traité
selon un protocole orienté octets. Ces qualités font d'UTF-16 un schéma de codage
particulièrement bien adapté pour traverser différents ordinateurs utilisant des codages et des
systèmes d'ordonnancement d'octet différents. Dans la mesure où les données XML sont
généralement largement partagées sur les réseaux, il est judicieux de maintenir le stockage
UTF-16 par défaut des données XML dans votre base de données et lorsque vous exportez les
données XML vers les clients.
UCS-2
UCS-2 est un prédécesseur d'UTF-16. UCS-2 diffère d’UTF-16 dans le sens où UCS-2 est un
codage de longueur fixe qui représente tous les caractères sous forme de valeur 16 bits
(2 octets) et ne prend donc pas en charge de caractères supplémentaires. UCS-2 est
fréquemment confondu avec UTF-16, qui est utilisé en interne pour représenter le texte dans
les systèmes d'exploitation Microsoft Windows (Windows NT, Windows 2000, Windows XP
et Windows CE), mais UCS-2 est plus limité.
Remarque : Pour obtenir les toutes dernières informations sur l'utilisation d'Unicode dans le
système d'exploitation Windows, consultez la rubrique Unicode dans la bibliothèque MSDN
(Microsoft Developer Network). Il est recommandé qu'une application Windows utilise UTF16 en interne et ne soit converti dans le cadre d'une « thin layer » via l'interface que si un autre
format doit être utilisé.
Les informations enregistrées en Unicode dans Microsoft SQL Server 2000 et
Microsoft SQL Server 2005 utilisent le codage UCS-2, qui enregistre chaque caractère sous la
forme de deux octets, quel que soit le caractère utilisé. Ainsi, la lettre latine « A » est traitée
de la même façon que le caractère cyrillique Sha ()), le caractère hébraïque Lamed (ì), le
caractère tamoul Rra (?) ou le caractère japonais Hiragana E (‚¦). Chacun possède un point de
code unique (pour ces lettres, les points de code sont U+0041, U+0248, U+05DC, U+0BB1 et
U+3048 respectivement, où chaque nombre hexadécimal à quatre chiffres représente les deux
octets utilisés par UCS-2).
Dans la mesure où UCS-2 n'autorise que 65 536 points de code différents pour le codage, il ne
gère pas en natif les caractères supplémentaires. Il traite plutôt les caractères supplémentaires
comme une paire de caractères Unicode de substitution non définis qui, lorsqu'ils sont
appariés, définissent un caractère supplémentaire. Cependant, SQL Server peut enregistrer des
caractères supplémentaires sans risque de perte ou d'altération. Vous pouvez étendre les
fonctionnalités de SQL Server pour utiliser les paires de substitution en créant des fonctions
CLR personnalisées. Pour plus d'informations sur l'utilisation des paires de substitution et des
caractères supplémentaires, reportez-vous à la section « Caractères supplémentaires et paires
de substitution », plus loin dans ce livre blanc.
Remarque : Les caractères supplémentaires se définissent comme étant « un caractère codé
en Unicode possédant un point de code supplémentaire ». Les points de code supplémentaires
se trouvent dans la plage entre U+10000 et U+10FFFF.
UTF-8
UTF-8 est un schéma de codage conçu pour traiter les données Unicode indépendamment de
l'ordonnancement des octets sur l'ordinateur. UTF-8 est utile pour travailler avec ASCII et
d'autres systèmes orientés sur les octets qui nécessitent des codages de 8 bits, tels que les
serveurs de messagerie qui doivent couvrir un vaste groupe d'ordinateurs utilisant des codages
différents, des ordres d'octet différents et des langues différentes. Bien que SQL Server 2005
n'enregistre pas de données au format UTF-8, il prend en charge UTF-8 pour traiter les
données XML (Extensible Markup Language). Pour plus d'informations, consultez la section
Prise en charge du format XML dans SQL Server 2005 de ce document.
D'autres systèmes de base de données, tels qu'Oracle et Sybase SQL Server, prennent en
charge Unicode en utilisant le stockage UTF-8. En fonction de l'implémentation d'un serveur,
cela peut être techniquement plus facile à mettre en œuvre pour un moteur de base de
données, parce que le code de gestion de texte existant sur le serveur ne nécessite pas de
modifications majeures pour traiter les données octet par octet. Cependant, dans
l'environnement Windows, le stockage UTF-8 présente plusieurs inconvénients :




Le modèle COM (Component Object Model) prend uniquement en charge UTF16/UCS-2 dans ses API et interfaces. Donc, si des données sont enregistrées au format
UTF-8, une conversion constante est nécessaire. Ce problème n'apparaît qu'avec
l'utilisation de COM. Le moteur de base de données SQL Server n'appelle
généralement pas les interfaces COM.
Les noyaux de Windows XP et Windows Server 2003 sont tous les deux en Unicode.
UTF-16 est le codage standard pour Windows 2000, Windows XP et Windows
Server 2003. Ils sont toutefois compatibles avec UTF-8. C'est pourquoi l'utilisation
d'un format de stockage UTF-8 dans la base de données nécessite de nombreuses
conversions supplémentaires. De façon générale, les ressources supplémentaires
nécessaires pour la conversion n'affectent pas le moteur de base de données
SQL Server, mais elles peuvent potentiellement affecter de nombreuses opérations
côté client.
UTF-8 peut être plus lent pour un grand nombre d'opérations de chaîne. Le tri, la
comparaison et presque n'importe quelle opération de chaîne peuvent être ralentis car
les caractères n'ont pas de largeur fixe.
UTF-8 a souvent besoin de plus de 2 octets et l'augmentation de la taille peut produire
un plus grand encombrement sur le disque et dans la mémoire.
Malgré ces inconvénients, étant donné que XML est devenu une norme importante pour la
communication sur Internet, vous souhaiterez peut-être envisager d'utiliser UTF-8 par défaut.
Remarque : Les anciennes versions d'Oracle et Java utilisent également UCS-2 et ne
peuvent pas reconnaître les paires de substitution. Oracle Corporation a commencé à prendre
en charge Unicode comme jeu de caractères de base de données dans Oracle 7. Oracle prend
actuellement en charge deux méthodes de stockage des données Unicode : (1) UTF-8 comme
schéma de codage des types de données de caractères CHAR et VARCHAR2, et pour tous les
noms et littéraux de SQL ; (2) UTF-16 pour le stockage des types de données Unicode
NCHAR, NVARCHAR et NCLOB. Oracle vous permet d'utiliser les deux méthodes en même
temps.
UTF-16
UTF-16 est le schéma de codage utilisé chez Microsoft et dans le système d'exploitation
Windows. UTF-16 est une extension destinée à gérer 1 048 576 caractères supplémentaires.
La nécessité d'une plage de substitution a été reconnue avant même l'apparition d'Unicode 2.0,
car il était devenu évident que l'objectif d'Unicode d'utiliser un seul point de code pour chaque
caractère de chaque langue ne pourrait pas être atteint en utilisant seulement
65 536 caractères. Par exemple, certaines langues comme le chinois nécessitent au moins ce
nombre de caractères pour coder des caractères tels que les idéogrammes historiques et
littéraires, qui, bien que rarement utilisés, sont néanmoins importants pour l'édition et les
sciences universitaires. La section suivant fournit de plus amples informations sur la plage de
substitution.
Tout comme UCS-2, UTF-16 utilise un ordre d'octets Little Endian, comme tout ce qui touche
Windows. Little Endian, à la différence de Big Endian, implique que l'octet d'ordre faible est
enregistré à l'adresse la plus basse dans la mémoire. L'ordonnancement des octets est
important au niveau du système d'exploitation. SQL Server, ainsi que d'autres applications
s'exécutant sur la plate-forme Windows, utilise l'ordre d'octets Little Endian. C'est pourquoi
un mot hexadécimal tel que 0x1234 est enregistré dans la mémoire sous la forme 0x34 0x12.
Dans certains cas, vous pourrez avoir besoin d'inverser explicitement l'ordre des octets pour
lire correctement le codage d'un caractère. SQL Server Integration Services fournit des
fonctions permettant de convertir l'ordre des octets d'un texte Unicode. Pour plus
d'informations, consultez la section SQL Server 2005 Integration Services de ce document.
Caractères supplémentaires et paires de substitution
Microsoft Windows utilise normalement UTF-16 pour représenter les données de caractère.
L'utilisation de 16 bits permet de représenter 65 536 caractères uniques. Cependant, cela ne
suffit pas pour couvrir tous les symboles utilisés dans les langues humaines. Dans UTF-16,
certains points de code utilisent un autre point de code immédiatement après les deux
premiers octets pour définir le caractère comme appartenant à la plage de substitution.
La norme Unicode compte 16 plans de caractères, avec la possibilité de définir 1 114 112
caractères. Le plan 0, ou BMP (Basic Multilingual Plane), peut représenter la plupart des
scripts écrits dans le monde, les caractères utilisés dans l'édition, les symboles mathématiques
et techniques, les formes géométriques, toutes les vignettes de niveau 100 Zapf et les signes
de ponctuation.
En dehors de BMP, les caractères de la plupart des plans ne sont pas encore définis, mais ils
peuvent être utilisés pour représenter des caractères supplémentaires. Les caractères
supplémentaires sont principalement utilisés pour les documents historiques et littéraires
classiques afin de faciliter le codage du riche héritage littéraire du chinois, du coréen et du
japonais. Les caractères supplémentaires incluent également des runes et d'autres scripts
historiques, les symboles musicaux, etc.
Dans UTF-16, une paire de points de code, appelée paire de substitution, est utilisée pour
représenter des caractères hors du jeu de caractères principal (BMP). Le secteur de
substitution est une plage Unicode entre U+D800 et U+DFFF qui contient 1 024 valeurs de
substitution faible et 1 024 valeurs de substitution étendue. Un substitut étendu (la plage
U+D800 à U+DBFF) et un substitut faible (la plage U+DC00 à U+DFFF) sont combinés pour
donner accès à plus d'un million de caractères possibles.
Il n'est pas considéré valide d'avoir seulement une moitié d'une paire de substitution ; pour
qu'un caractère soit valide, il doit toujours y avoir un substitut étendu suivi d'un substitut
faible. Par conséquent, la vérification d'un substitut devient une question de vérification de
plage, qui est facile en comparaison des règles plutôt complexes qui sont nécessaires pour
détecter les caractères DBCS (double-byte character system – système de caractère à deux
octets).
SQL Server 2000 et SQL Server 2005 peuvent tous deux enregistrer des paires de
substitution, bien qu'UCS-2 ne reconnaisse pas les substituts. SQL Server traite les paires de
substitution comme deux caractères Unicode non définis et non un seul caractère. Ce type
d'applications est généralement appelé de substitution neutre ou de substitution sûre, ce qui
signifie qu'il n'existe pas de possibilité intrinsèque d'interagir avec les données, mais qu'au
moins les données peuvent être enregistrées sans risque de perte.
Par opposition, les applications compatibles avec les caractères de substitution peuvent non
seulement prendre en compte les paires de substitution, mais également traiter les
combinaisons de caractères et les autres caractères nécessitant un traitement spécial. Une
application bien écrite peut détecter des substituts séparés, et les recombiner, en utilisant
seulement quelques sous-routines. Les applications compatibles avec les caractères de
substitution sont notamment Microsoft Word et Internet Explorer 5 et versions ultérieures.
Quand vous travaillez avec des caractères supplémentaires dans SQL Server, rappelez-vous
les points suivants :




Dans la mesure où les paires de substitution sont considérées comme deux points de
code Unicode séparés, la taille des caractères nvarchar(n) doit être 2 pour contenir un
seul caractère supplémentaire (en d'autres termes, un espace pour une paire de
substitution).
L'utilisation des caractères supplémentaires n'est pas prise en charge dans les
métadonnées, par exemple dans les noms des objets de base de données. En général, le
texte utilisé dans les métadonnées doit répondre aux règles fixées pour les
identificateurs. Pour plus d'informations, consultez la section Identificateurs dans la
documentation en ligne de SQL Server 2005.
Les opérations de chaîne standard ne reconnaissent pas les caractères supplémentaires.
Les opérations telles que SUBSTRING(nvarchar(2),1,1) ne renvoient que le substitut
étendu de la paire de substitution du caractère supplémentaire. La fonction LEN
renvoie le décompte de deux caractères pour chaque caractère supplémentaire
rencontré : un pour le substitut étendu et un pour le substitut faible. Cependant, vous
pouvez créer des fonctions personnalisées qui détectent les caractères supplémentaires.
L'échantillon StringManipulate dans la section Manipulation de chaînes compatibles
avec les caractères supplémentaires de la documentation en ligne de SQL Server 2005,
explique comment créer de telles fonctions.
Le comportement des fonctions de tri et de recherche des caractères supplémentaires
peut varier en fonction du classement. Dans les nouveaux classements _90 et BIN2,
les caractères supplémentaires sont correctement comparés, tandis que dans les
classements plus anciens et les classements standard de Windows, tous les caractères
supplémentaires sont considérés égaux à tous les autres caractères supplémentaires.
Par exemple, les classements japonais et coréens par défaut ne gèrent pas de caractères
supplémentaires, contrairement à Japanese_90 et Korean_90.
Pour plus d'informations sur les points de code Unicode, les pratiques recommandées pour
concevoir des applications reconnaissant les substitutions et l'utilisation des données Unicode,
consultez l'article Globalisation étape par étape : compatibilité Unicode). Pour plus
d'informations sur les plages de caractères prises en charge dans la norme Unicode, consultez
la section relative aux expressions Unicode régulières dans Norme standard Unicode n°18.
Caractères combinés
Les caractères combinés sont des caractères utilisés conjointement à d'autres caractères pour
modifier leur apparence ou leur signification. Les caractères combinés forment un seul
glyphe. Par exemple, les signes diacritiques utilisés dans les langues européennes sont des
caractères combinés qui peuvent soit apparaître sous forme de caractère plus diacritique, soit
sous forme de caractère précomposé.
Dans .NET Framework, la séquence de caractères combinés est traitée comme un élément de
texte (en d'autres termes, une unité de texte affichée comme un seul caractère). Un élément de
texte est différent d'un élément de tri. Par exemple, dans certains classements, les lettres
« CH » ne sont pas des caractères combinés ; ils sont deux éléments de texte séparés, mais
peuvent être traités comme un élément de tri.
Remarque : Les fonctions SQL, d'un autre côté, traitent généralement les caractères
combinés de la même façon que les caractères supplémentaires : elles les traitent comme deux
points de code Unicode séparés. Pour obtenir un exemple de création d'une fonction
personnalisée qui compte et compare plus précisément les caractères supplémentaires,
consultez l'échantillon StringManipulate.
La façon dont les caractères combinés se mappent sur des éléments de tri dépend de la norme
Unicode et du classement. Certains caractères combinés sont toujours considérés comme
l'équivalent de leurs formes variables, sans tenir compte du nombre de points de code
différents qu'ils incluent (par exemple, la lettre latine a plus un diacritique est traitée comme
l'équivalent de la lettre précomposée, y compris le signe diacritique), tandis que dans certains
classements il est possible de trier ou de comparer des chaînes différemment, en fonction de la
présence du signe diacritique.
Les caractères combinés ont été définis pour la première fois dans Unicode 2.0. Pour plus
d'informations, consultez la section des spécifications Unicode 4.0.1 qui traite des Zones
spéciales et des Caractères de format. Le Consortium Unicode publie également un forum aux
questions spécifique pour les caractères combinés et leur traitement. Pour plus d'informations
sur les méthodes de traitement des caractères combinés dans .NET Framework, consultez la
section Normalisation dans le guide du développeur de .NET Framework.
Prise en charge pour GB18030
GB18030 (GB18030-2000) est une norme distincte rendue obligatoire par la République
populaire de Chine (PRC) pour coder les caractères chinois. Elle spécifie une page de code et
une table de mappage étendues à Unicode. Depuis le 1er août 2006, la prise en charge de ce
jeu de caractères est officiellement exigée pour tous les produits logiciels vendus en PRC. La
conformité à GB18030 inclut des exigences de prise en charge de certaines langues qui ne
l'étaient pas précédemment (par exemple, le tibétain, le mongol, le yi et l'ouïgour.
Dans GB18030, les caractères peuvent être de 1, 2 ou 4 octets. Des paires de substitution sont
utilisées pour permettre le mappage de séquences GB18030 de 4 octets sur Unicode.
SQL Server 2005 fournit la prise en charge de caractères codés en GB18030 dans la mesure
où il les reconnaît lorsqu'ils entrent dans le serveur à partir d'une application côté client.
SQL Server 2005 convertit et enregistre ces caractères en natif au format Unicode. Ensuite, ils
sont enregistrés dans le serveur et traités en tant que caractères Unicode dans les opérations
suivantes exécutées sur eux. GB18030 ne possède pas de paramètre régional; il a seulement
un identificateur de page de code afin d'autoriser les conversions vers et depuis Unicode.
L'identificateur de page de code Microsoft pour GB18030-2000 est 54936.
Lorsque vous utilisez des caractères GB18030, n'oubliez pas qu'ils peuvent être utilisés dans
les opérations de tri et de comparaison, mais dans les classements antérieurs à SQL Server 90,
les comparaisons sont seulement basées sur leurs points de code et pas sur d'autres méthodes
qui seraient plus logiques sur le plan linguistique. Faites par conséquent attention lorsque
vous utilisez des caractères GB18030 dans des opérations telles que ORDER BY, GROUP
BY et DISTINCT, surtout lorsque des caractères GB18030 et non GB18030 sont inclus dans
une même opération. Pour autoriser les comparaisons de chaînes significatives qui utilisent
des caractères GB18030, utilisez la nouvelle version du classement SQL Server 90, indiquée
par le suffixe 90 ajouté à son nom. Par exemple, au lieu du classement Chinese_PRC, utilisez
Chinese_PRC_90.
Pour activer la prise en charge de la norme GB18030, vous pouvez installer un package de
prise en charge, disponible sur le portail Aide et support Microsoft, qui inclut un fichier de
polices et des bibliothèques pour prendre en charge la conversion entre GB18030 et Unicode.
Le package de prise en charge est un binaire international unique qui fonctionne sous
Windows XP ou Windows 2000. Cependant, la prise en charge facultative des langues
d'Extrême-Orient doit être installée sur le système. Dans Windows Vista, la prise en charge de
la norme GB18030 est incluse, y compris les polices et les configurations clavier pour les
langues minoritaires de Chine tels que le tibétain, le mongol, le yi et l'ouïgour. Ces langues
utilisent les paramètres régionaux chinois (RPC).
Remarque : Certaines fonctions permettant de convertir les octets GB18030 en caractères
Unicode, telles que BytesToUnicode, ne sont pas prises en charge dans Vista. Lors de la
conversion d'octets GB18030 en caractères Unicode dans Vista, utilisez la fonction
MultiByteToWideChar.
Pour plus d'informations sur la prise en charge de cette norme dans les produits Microsoft,
consultez le portail Microsoft Global Development and Computing sur Microsoft.com.
Types de données dans SQL Server 2005
Cette section décrit les nouveaux types de données dans SQL Server 2005 et explique les
problèmes relatifs à l'utilisation de types de données SQL Server 2005 pour enregistrer les
données internationales.
Types de texte non Unicode : char, varchar, text, varchar(max)
Lorsque vous traitez des données de texte enregistrées dans le type de données char, varchar,
varchar(max) ou text, la principale restriction à prendre en compte est que seules les
informations d'une page de code unique peuvent être validées par le système. (Vous pouvez
enregistrer des données à partir de plusieurs pages de code, mais ce n'est pas recommandé).
La page de code exacte utilisée pour valider et enregistrer les données dépend du classement
de la colonne. Si un classement au niveau colonne n'a pas été défini, le classement de la base
de données est utilisé. Pour déterminer la page de code utilisée pour une colonne donnée, vous
pouvez utiliser la fonction COLLATIONPROPERTY, comme illustré dans les exemples de
code suivants :
SELECT COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')
936
SELECT COLLATIONPROPERTY('Latin1_General_CI_AI', 'CodePage')
1252
SELECT COLLATIONPROPERTY('Hindi_CI_AI_WS', 'CodePage')
0
Le dernier exemple renvoie 0 (Unicode) comme page de code pour l'hindi. Cet exemple
illustre le fait que de nombreux paramètres régionaux, tels que le géorgien et l'hindi, ne
possèdent pas de pages de code, car il s'agit de classements Unicode uniquement. Ces
classements ne conviennent pas pour les colonnes qui utilisent le type de données char,
varchar ou text, et certains classements ont été désapprouvés. Pour une liste des classements
disponibles et des classements Unicode uniquement, consultez la section Paramètres de
classement dans la configuration dans la documentation en ligne de SQL Server 2005.
Important Dans SQL Server 2005, utilisez le type de données varchar(max) plutôt que le
type de données text. Remarque : Le type de données text sera supprimé dans une future
version de Microsoft SQL Server. Pour plus d'informations, consultez la section Utilisation
des types de données de valeur étendue dans la documentation en ligne de SQL Server 2005.
Lorsque des données Unicode doivent être insérées dans des colonnes non Unicode, les
colonnes sont converties en interne à partir d'Unicode en utilisant l'API
WideCharToMultiByte et la page de code associée au classement. Si un caractère ne peut
pas être représenté sur la page de code donnée, il est remplacé par un point d'interrogation (?).
Par conséquent, l'apparition de points d'interrogation aléatoires dans vos données constitue
une indication fiable de la corruption de vos données en raison d'une conversion non
spécifiée. Elle est également une bonne indication que votre application pourrait bénéficier de
la conversion à un type de données Unicode.
Si vous utilisez un littéral de chaîne d'un type non Unicode qui n'est pas pris en charge par le
classement, la chaîne est convertie d'abord en utilisant la page de code de la base de données
par défaut, elle-même dérivée du classement par défaut de la base de données.
Un autre problème que vous pourriez rencontrer réside dans l'impossibilité d'enregistrer des
données lorsque tous les caractères que vous souhaitez prendre en charge ne sont pas contenus
dans la page de code. Dans de nombreux cas, Windows considère une page de code
particulière comme la page de code « la mieux adaptée », ce qui signifie qu'il n'est pas garanti
que vous puissiez vous baser sur la page de code pour traiter tout le texte : il s'agit simplement
de la meilleure disponible. Le script arabe est un exemple de ce cas de figure : il prend en
charge une grande variété de langues, y compris le baloutchi, le berbère, le persan, le
kashmiri, le kazakh, le kirghiz, le kurde, le pachto, le sindhi, l'ouïgour, l'urdu, et bien d'autres
encore. Toutes ces langues ont des caractères supplémentaires par rapport à la langue arabe,
comme définie dans la page de code Windows 1256. Si vous tentez d'enregistrer ces
caractères supplémentaires dans une colonne non Unicode utilisant le classement arabe, les
caractères sont transformés en points d'interrogation.
Types de texte Unicode : nchar, nvarchar, nvarchar(max), ntext
La spécification SQL-92 définit les types de données précédés par « N » (soit les types de
données « nationaux »), mais ne nécessite pas spécifiquement que les types de données soient
utilisés pour Unicode. La véritable définition de ces types de données dépend de la plateforme de base de données ou du développeur. Dans SQL Server 2000 et SQL Server 2005,
ces types de données sont définis comme équivalents à UCS-2, qui est un codage Unicode.
Cependant, lorsque vous travaillez avec d'autres serveurs de base de données, il est important
de savoir que les types de données « N » ne signifient pas spécifiquement Unicode. La
décision de définir les types de données « N » comme Unicode est spécifique à
Microsoft SQL Server.
Le type de données nvarchar(max), nouveau dans SQL Server 2005, contient jusqu'à
2 gigaoctets (Go) de données et constitue l'alternative de prédilection au type de données
ntext.
Important Dans SQL Server 2005, utilisez le type de données nvarchar(max) plutôt que le
type de données ntext. Remarque : Le type de données text sera supprimé dans une future
version de Microsoft SQL Server. Pour plus d'informations, consultez la section Utilisation
des types de données de valeur étendue dans la documentation en ligne de SQL Server 2005.
Pour le stockage de scripts complexes, tels que l'hindi et le tamoul, assurez-vous que les
données sont dans le bon ordre. Beaucoup de langues, tels que le tamoul, spécifient que
certaines lettres sont retriées lors de l'affichage du texte. Par conséquent, l'ordre logique du
texte tel qu'il est enregistré en mémoire peut être différent de l'ordre visuel qui sera perçu dans
une interface utilisateur. Les données doivent toujours être enregistrées dans le bon ordre
logique pour tout langage de script complexe, c'est-à-dire toutes les langues indiennes, l'arabe,
le persan, l'hébreu et bien d'autres. Le rendu effectif de telles données est un problème à part
(voir la section les Données multilingues dans l'interface utilisateur de ce document).
Bien que les colonnes « N » puissent prendre en charge les données de n'importe quelle
langue ou n'importe quelle combinaison de langues, lorsque vous triez les données, vous ne
pouvez choisir qu'un seul classement. Pour en apprendre plus sur la façon de choisir un
classement, consultez la section Classements de ce livre blanc. Aucune des restrictions de
page de code précédemment mentionnées ici ne s'applique aux colonnes Unicode.
Dans SQL Server 2005, vous pouvez créer des fonctions complémentaires pour améliorer la
manipulation des chaînes et le comportement du classement avec les caractères
supplémentaires. Par exemple, l'échantillon StringManipulate pour
Microsoft SQL Server 2005 présente le traitement de chaînes avec reconnaissances des
caractères supplémentaires. Cet échantillon indique comment implémenter cinq fonctions de
chaîne Transact-SQL qui fournissent les mêmes fonctions de manipulation de chaîne que les
fonctions de chaîne prédéfinies, mais avec en plus la capacité de reconnaissance des
caractères supplémentaires afin de gérer les chaînes de caractères Unicode et supplémentaires.
Types de données CLR
Microsoft SQL Server vous offre la possibilité d'étendre le système de type de SQL en
définissant un type de données personnalisé pouvant être utilisé dans la programmation
SQL Server. Ces types définis par l'utilisateur sont bien adaptés pour la création personnalisée
des types de date, d'heure, de devise et numériques étendus, ou pour les données codées ou
chiffrées.
Un type défini par l'utilisateur peut être utilisé pour définir le type d'une colonne dans une
table, ou un paramètre de variable ou routine dans le langage Transact-SQL. Une instance
d'un type défini par l'utilisateur peut être une colonne dans une table, une variable dans une
commande, une fonction ou une procédure stockée, ou un argument d'une fonction ou d'une
procédure stockée. Un type défini par l'utilisateur est implémenté comme une classe gérée
dans n'importe quel langage CLR, puis enregistré avec SQL Server. Pour plus d'informations
sur la manière de mettre en œuvre un type défini par l'utilisateur en utilisant Visual Basic ou
Microsoft Visual C#, consultez la section Codage des types définis par l'utilisateur dans la
documentation en ligne de SQL Server 2005.
Vous pouvez utiliser des types définis par l'utilisateur pour étendre le système de type scalaire
du serveur, ce qui permet le stockage d'objets CLR dans une base de données SQL Server.
Les types définis par l'utilisateur peuvent contenir plusieurs éléments et suivre des
comportements spéciaux définis par l'utilisateur. Ceci les différencie du type de données alias
traditionnel, qui consiste en un type de données système SQL Server unique. Par exemple,
l'exemple de type défini par l'utilisateur Currency fourni dans la documentation en ligne de
SQL Server 2005 prend en charge la gestion de sommes d'argent dans le système monétaire
d'une culture particulière. Vous devez définir deux champs : Une valeur string pour
CultureInfo, qui spécifie la source de la devise (par exemple, fr-fr) et une valeur decimal pour
CurrencyValue, pour représenter la quantité d'argent.
Dans la mesure où le système dans son ensemble accède aux types définis par l'utilisateur,
leur utilisation pour les types de données complexes peut diminuer les performances. Les
données complexes sont généralement mieux modélisées en utilisant des lignes et des tables
traditionnelles. La documentation en ligne de SQL Server 2005 inclut plusieurs exemples qui
expliquent comment créer et exploiter les types personnalisés définis par l'utilisateur.
L'exemple UTF8String pour SQL Server 2005 démontre comment implémenter un type de
données défini par l'utilisateur qui étend le système de types de la base de données afin de
fournir le stockage des valeurs codées par UTF8. Ce nouveau type implémente également le
code permettant de convertir les chaînes Unicode vers et depuis UTF8. Pour plus
d'informations, consultez la section Type de données défini par l'utilisateur (UDT) d'une
chaîne UTF8 dans la documentation en ligne de SQL Server 2005.
Pour des exemples supplémentaires, consultez la section Exemples de programmation CLR
dans la documentation en ligne de SQL Server 2005.
Type de données XML
Le type de données XML vous permet d'enregistrer un fragment ou un document XML dans
des bases de données SQL Server. Les instances du type de données XML peuvent être des
colonnes dans une table, des fonctions ou des arguments de procédure stockée, ou des
variables dans une fonction ou une procédure stockée. De plus, le type de données XML peut
être spécialisé en indiquant un schéma XML associé qui fournit les contraintes de validation
et les informations de type de données pour l'instance XML.
Vous exécutez des opérations sur une instance d'un type de données XML en utilisant les
méthodes d'interrogation XML incorporées. Ces méthodes acceptent les requêtes et les relevés
de manipulation de données qui sont appropriés pour les données XML. Vous pouvez ensuite
spécifier des requêtes (XQuery) sur le document XML enregistré dans la variable de type de
données ou la colonne XML, puis appliquer des mises à jour (en utilisant les commandes
insert, update ou delete) à l'instance XML. Vous pouvez également utiliser un XSD pour créer
un index pour la colonne XML, ce qui améliorera les performances des requêtes.
Pour plus d'informations sur le type de données xml et les fonctionnalités de
SQL Server 2005 visant à prendre en charge le traitement de données XML, consultez la
section Prise en charge du format XML dans SQL Server 2005 de ce document.
Types date/heure : datetime, smalldatetime
Les types de données de date et d'heure utilisés dans SQL Server 2000 et SQL Server 2005
ont les définitions suivantes :
datetime
Les données de date et d'heure du calendrier grégorien du s'étendant du 1 janvier 1753 au
31 décembre 9999, avec une précision d'un trois centième de seconde (soit 3,33 millisecondes
ou 0,00333 secondes).
smalldatetime
Données de date et d'heure du calendrier grégorien s'étendant du 1 janvier 1900 au
6 juin 2079, avec une précision à la minute. Les valeurs smalldatetime avec 29,998 secondes
ou moins sont arrondies à la minute inférieure la plus proche ; les valeurs avec
29,999 secondes ou plus sont arrondies à la minute supérieure la plus proche.
Microsoft SQL Server rejette les données en dehors de ces plages. Les données réelles sont
enregistrées en interne sous forme de deux nombres entiers qui représentent la date et l'heure
en question (entiers de 4 octets pour datetime et entiers de 2 octets pour smalldatetime).
Les données stockées ne représentent pas une heure locale ou une heure universelle et ne
contiennent pas d'informations sur le fuseau horaire. Si vous avez besoin de convertir des
dates à l'heure universelle, vous pouvez utiliser l'une des fonctions de date UTC. L'heure UTC
actuelle est dérivée de l'heure locale actuelle et du paramètre de fuseau horaire dans le
système d'exploitation de l'ordinateur sur lequel s'exécute l'instance de Microsoft SQL Server.
La valeur ne possédant pas de format intrinsèque spécifique au lieu, il appartient au
développeur de définir les conversions nécessaires. SQL Server prend en charge de
nombreuses conversions spécifiques aux paramètres régionaux, qui peuvent être exécutées au
niveau serveur, au lieu de se baser sur les solutions personnalisées des développeurs. Ces
styles de date sont accessibles via la fonction CONVERT, qui utilise un type de données, une
expression et un style facultatif, comme illustré dans le tableau suivant.
Avec siècle
Sans siècle
Standard
0 ou 100
101
102
1
2
Par défaut
Anglais (États-Unis)
ANSI
Entrée (conversion en datetime)
Sortie (conversion en text)
mois jj aaa hh: miAM (ou PM)
mm/jj/aa
aa.mm.jj
103
3
104
105
106
107
108
9 ou 109
4
5
6
7
8
-
110
111
112
13 ou 113
10
11
12
-
114
20 ou 120
21 ou 121
14
-
126
-
130
131
-
Anglais (Royaumejj/mm/aa
Uni)/Français
Allemand
jj.mm.aa
Italien
jj-mm-aa
jj mois aa
Mois jj, aa
hh:mm:ss
Par défaut +
mois jj aaaa hh:mi:ss:mmmAM
millisecondes
(ou PM)
Anglais (États-Unis) mm-jj-aa
Japon
aa/mm/jj
ISO
aammjj
Par défaut en Europe + jj mois aaaa hh:mm:ss:mmm(24h)
millisecondes
hh:mi:ss:mmm(24h)
ODBC canonique
aaaa-mm-jj hh:mi:ss(24h)
ODBC canonique +
aaaa-mm-jj hh:mi:ss.mmm(24h)
millisecondes
ISO8601 (aucun
aaaa-mm-jj Thh:mm:ss:mmm
espace)
koweïtien (Hijri)
jj mois aaaa hh:mi:ss:mmmAM
koweïtien (Hijri)
jj/mm/aa hh:mi:ss:mmmAM
L'exemple suivant montre comment la fonction CONVERT est utilisée pour représenter la
date actuelle dans un style spécifié :
SELECT CONVERT(char, GETDATE(), 100) AS [100]
RETURNS:
Aug 16 2000 11:50AM
Vous pouvez ensuite convertir les données d'une chaîne en une valeur de date de façon très
semblable :
SELECT CONVERT(datetime, 'Aug 16 2000 11:50AM', 100) AS [100]
RETURNS:
100
2000-08-16 11:50:00.000
Si vous convertissez des dates dans le style 130 (koweïtien ou hijri) vers un type de données
char, les données peuvent être altérées si le classement n'est pas l'un des classements arabes
utilisant la page de code 1256 pour les conversions Unicode. Par exemple, la figure 1 illustre
une colonne convertie en char et une deuxième colonne convertie en nchar. Dans cet
exemple, l'ordinateur client utilise le paramètre régional EN-US. Par conséquent, lorsque vous
tentez d'utiliser le type de données char, les caractères arabes sont transformés en point
d'interrogation, tandis que si vous utilisez le type de données nchar, les caractères arabes
apparaissent.
Figure 1.Utilisation de la fonction CONVERT avec les données de date/heure (Cliquez
sur l'image pour l'agrandir)
Cependant, même la chaîne représentée avec nchar n'a toujours pas le format correct, comme
ce serait le cas sur un ordinateur client arabe, à cause des restrictions dans l'Éditeur de
requête. La figure 2 illustre la présentation de la chaîne de date correcte du calendrier hijri.
Figure 2. Chaîne de date hijri
L'arabe ne peut pas être affiché correctement parce que les scripts complexes, tels que l'arabe,
ont des règles de mise en page qui contrôlent le rendu des données. Dans le cas des langues
bidirectionnelles (BIDI) telles que l’hébreu, la mise en page entraîne l'inversion de toutes les
données. Dans le cas de l'arabe, la mise en page a un effet plus marqué, parce que les formes
réelles des lettres peuvent changer en fonction des lettres environnantes. Ce problème ne
survient pas dans les versions de Windows postérieures à Windows 2000, ou dans les versions
arabes précédentes de Windows.
De plus, la chaîne de date qui est renvoyée peut causer des problèmes dans les situations
bidirectionnelles où elle est nécessaire, parce que les règles de mise en page du texte
bidirectionnel utilisé par une application (telle qu'Internet Explorer) provoquent l'affichage de
la date comme illustré à la figure 3.
Figure 3. Exemple de chaîne de date bidirectionnelle
Cet ordre visuel (jj hh:mi:ss aaaa mois :) n'est évidemment pas l'ordre prévu ; il est possible
de considérer le problème comme étant une restriction générale du style 130 dans la fonction
CONVERT. Vous pouvez contourner ce problème en ajoutant le caractère de contrôle
Unicode correct devant la chaîne, comme dans la requête suivante :
SELECT NCHAR(8207) + CONVERT(nchar, GETDATE(), 130)
La fonction NCHAR retourne un caractère basé sur le point de code Unicode transmis. 8207
ou 0x200F en hexadécimal est le marqueur Droite à gauche (RLM, Right-to-Left Marker) et il
permet l'affichage correct de la chaîne.
Performances et espace de stockage
Si vous définissez une colonne en utilisant l'un des types de données Unicode, vous pouvez
rencontrer les problèmes suivants, liés à l'espace de stockage et à la vitesse.
Augmentation de l'espace de stockage
Les types de données Unicode utilisent deux octets ou plus par caractère, tandis que les types
de données non Unicode utilisent un octet pour tout texte non DBCS et deux octets pour les
langues asiatiques utilisant DBCS. Par conséquent, à moins que vos données n'utilisent l'une
des pages de code asiatiques, lors d'une conversion en Unicode vous utiliserez deux fois plus
d'espace pour enregistrer les données. L'augmentation de l'espace de stockage nécessaire doit
être prise en compte lorsque vous mettez à niveau des bases de données existantes, ou lorsque
vous devez choisir les types de données corrects pour un nouveau projet. Si vous enregistrez
uniquement des données dans une colonne qui est sur une seule page de code (non asiatique),
vous préférerez peut-être ne pas utiliser Unicode afin d'économiser de l'espace sur le disque et
dans la mémoire. Cependant, les avantages de la conversion Unicode compensent
généralement l'impact sur le stockage.
Remarque : Lors de l'enregistrement de données DBCS asiatiques, la méthode de codage
UCS-2 utilisée par SQL Server 2005 tend à être plus efficace que la méthode UTF-8 utilisée
par beaucoup d'autres programmes de base de données. C'est parce que UTF-8 utilise trois
octets pour stocker la plupart des caractères de langues asiatiques, alors que UCS-2 n'en
utilise que deux (à l'exception des caractères supplémentaires et des caractères combinés).
D'autre part, pour les langues non DBCS, comme les caractères de base ASCII, UTF-8 utilise
généralement seulement un octet par caractère, alors que UCS-2 en utilise deux.
Problèmes de vitesse
L'impact de l'utilisation de types de données Unicode sur les performances est complexe.
Vous devez prendre en compte les problèmes suivants :






Si vous utilisez Windows XP, Windows Server 2003 ou Windows Vista, le système
d'exploitation s'attend à trouver des données Unicode. Par conséquent, les colonnes
non Unicode doivent souvent être converties lorsque vous affichez des données ou
utilisez les services du système d'exploitation.
Lorsque vous traitez un format de données DBCS natif, il peut falloir plus de temps
pour charger la quantité accrue de données.
Si vous travaillez avec plusieurs instances ou produits de serveur de base de données
ou si vous échangez des données avec d'autres applications, le nombre de conversions
peut affecter les performances.
Si vous traitez des langues asiatiques, Unicode est plus rapide que la page de code
DBCS spécifique à la langue. La raison en est que les données DBCS n'ont pas de
largeur fixe : il s'agit d'un mélange de caractères à deux octets et un octet.
Si vous traitez des langues non asiatiques, le tri des données Unicode peut être plus
lent que le tri de données non Unicode.
L'ordre binaire est l'ordre de tri le plus rapide et il est sensible à la casse, mais il peut
produire des ordres de tri imprévus. Si vous choisissez un ordre de tri binaire, les
options sensibles à la casse, aux accents, aux caractères kana (caractères japonais) et à
la largeur ne sont pas disponibles.
Important Pour évaluer les performances de façon réaliste, vous devez tester les deux
scénarios : Unicode et non Unicode.
Migration d'informations de métadonnées dans les tables
système
Les tables système dans SQL Server 2005 enregistrent toutes les données, y compris les
identificateurs d'objets, comme Unicode. Ceci réduit les problèmes qui peuvent survenir avec
les différences de classements entre les bases de données et les colonnes.
Si vous migrez de SQL Server 2000 à SQL Server 2005, le seul changement significatif réside
dans le fait que SQL Server 2000 utilise la norme Unicode 2.0 pour la liste de caractères
valides dans les identificateurs, alors que SQL Server 2005 prend en charge la norme Unicode
version 3.2.
Vous pouvez mettre directement à niveau des instances de SQL Server 2000 Service Pack 3
(SP3) ou ultérieures et des instances de SQL Server 7.0 SP4 ou ultérieures vers
SQL Server 2005. Vous pouvez exécuter la plupart des opérations de mise à niveau par le
biais du programme d'installation. Toutefois, certains composants prennent en charge ou
nécessitent la migration des applications ou des solutions une fois l'installation terminée.
Classements
L'ordre de tri est un élément critique mais souvent négligé de la définition de bases de
données. Les utilisateurs ont tendance à supposer que le tri suit obligatoirement leur propre
alphabet. Cependant, certaines langues, telles que le grec, le russe et le thaï utilisent des
alphabets différents. Certaines langues, comme le japonais, utilisent plusieurs alphabets, avec
des règles de tri complexes. Même dans les langues européennes, il existe une grande
différence dans la façon dont sont gérés les caractères individuels. Par exemple, les
utilisateurs espagnols s'attendent à ce que la combinaison de lettres « ch » soit triée en tant
que caractère unique après la lettre « h ».
Le tri de base fonctionne sur les classements, qui contrôlent les ordres de tri, entre autres
comportements. Le tri peut être optimisé par la création d'index.
Le tri fonctionne conjointement avec une technique appelée normalisation de chaîne. Ce type
de normalisation diffère du sens du mot auquel les développeurs de base de données sont
habitués. La normalisation de chaîne désigne une méthode de comparaison de deux chaînes
afin de pouvoir les trier : Par exemple, vous pouvez spécifier si des types de caractères kana
différents doivent être traités comme des équivalents, ou si les accents doivent être ignorés.
Pour les colonnes non Unicode, le classement prend un second sens très important : le
classement spécifie la page de code pour les données et détermine donc quels caractères
peuvent être représentés. Les données peuvent être déplacées entre des colonnes Unicode sans
nécessiter de conversion spéciale ou de mappages de caractères. Les données déplacées entre
les colonnes non Unicode sont fréquemment tronquées ou corrompues, voire ne peuvent pas
être affichées du tout.
Classements dans SQL Server 6.5 et versions antérieures
Dans SQL Server 6.5 et les versions antérieures, les classements ont été utilisés pour spécifier
la page de code à utiliser pour la langue en général. Les différents ordres de tri, notamment,
étaient soumis à de nombreuses restrictions. Par exemple, vous pouviez uniquement prendre
en charge des langues d'Europe occidentale si vous utilisiez Latin-1.Les classements
limitaient également le nombre de paramètres régionaux que vous pouviez représenter dans
une seule instance de SQL Server. En d'autres termes, vous ne pouviez enregistrer ou afficher
que la langue utilisée dans une zone géographique spécifique. Pour utiliser une langue
différente, vous deviez configurer une base de données à part, voire un serveur distinct.
Ces problèmes concernent également le classement de champs non Unicode dans les versions
ultérieures de SQL Server.
Classements mis à jour dans SQL Server 7.0
SQL Server 7.0 fournissait un classement Unicode et un classement non Unicode par serveur.
Les classements non Unicode étaient définis comme une combinaison d'une page de code et
d'un ordre de tri. Souvent, chaque page de code peut prendre en charge plus d'un ordre de tri.
Par exemple, les langues latines autorisent généralement un tri sensible à la casse et un tri non
sensible à la casse. Le chinois simplifié autorise le tri par nombre de trais et le tri phonétique.
Dans un classement Unicode, n'importe quel caractère de n'importe quelle langue peut être
inclus dans une colonne, et les divers classements fournis étaient conçus pour garantir que
toutes les différences spécifiques au classement sont gérées convenablement. En d'autres
termes, vous choisissez la « meilleure option » pour donner aux utilisateurs ce qu'ils attendent.
Par exemple, le classement Unicode général vous permet de trier les données en persan.
Un classement Unicode consiste en un paramètre régional et en plusieurs styles de
comparaison. Les paramètres régionaux sont habituellement nommés d'après les pays ou les
régions culturelles. Ils trient les caractères selon la norme en vigueur dans cette région. Le
classement Unicode fournit toujours un ordre de tri pour tous les caractères de la norme
Unicode, mais le paramètre régional a toujours priorité. Tout paramètre régional ne possédant
pas de classement Unicode unique pris en charge doit utiliser le classement Unicode général.
L'ordre de tri Unicode général gère correctement non seulement les données, mais également
le tri de données en afrikaans, albanais, anglais, arabe, basque, biélorusse, bulgare, féroïen,
persan, géorgien (traditionnel), grec, hébreu, hindi, indonésien, malais, russe, serbe, swahili et
urdu.
L'une des modifications importantes apportées à SQL Server 7.0 résidait dans l'apport d'un
modèle indépendant du système d'exploitation pour la comparaison de chaîne, de sorte que les
classements entre tous les systèmes d'exploitation (de Windows 95 à Windows 2000) soient
cohérents. Ce code de comparaison de chaîne était basé sur le même code que celui qu'utilise
Windows 2000 pour sa propre normalisation de chaîne, et il est encapsulé de manière à être
identique sur tous les ordinateurs et dans toutes les versions de SQL Server.
Classements dans SQL Server 2000
Dans SQL Server 2000, le modèle de classement a été modifié pour éliminer des incohérences
entre les deux différents systèmes de classement : les classements Windows et les classements
SQL. Un modèle plus flexible était nécessaire pour gérer toutes les nouvelles exigences des
classements. De nouveaux classements étaient également nécessaires dans SQL Server 2000
pour gérer la page de code des colonnes non Unicode.
Pour répondre à ces besoins, un modèle cohérent unique a été conçu pour gérer les tris
Unicode et non Unicode. Chacun des classements a été associé à des suffixes qui permettent
de définir si le classement est sensible à la casse, aux accents, à la largeur ou aux caractères
kana. L'annexe A contient un tableau répertoriant les suffixes. Ces 17 suffixes, combinés de
manière adéquate aux 40 langues prises en charge dans SQL Server 2000, ont créé un total de
680 classements Windows.
Les noms de langue utilisés pour les classements étaient arbitraires et ont été choisis de
manière à représenter chaque page de code unique prise en charge pour les données non
Unicode et un ordre de tri pour toutes les données. Dans de nombreux cas, plusieurs langues
pouvaient être entièrement représentées sur une seule page de code ou gérées par le même
ordre de tri qu'une autre langue. Ces langues supplémentaires ont alors été supprimées de la
liste.
Classements dans SQL Server 2005
SQL Server 2005 prend en charge toutes les langues prises en charge par les systèmes
d'exploitation Microsoft Windows. SQL Server 2005 a donc ajouté une prise en charge pour
les classements nouveaux et mis à jour dans Windows Server 2003 et Windows XP. (Ces
classements sont installés dans le cadre de l'installation de SQL Server 2005. Vous contrôlez
le choix du classement pour le serveur et la base de données pendant l'installation. Les mises à
jour du système d'exploitation n'affectent pas les classements utilisés dans SQL Server).
Les classements d'Extrême-Orient, qui prennent en charge des caractères supplémentaires,
représentaient un élément important des nouveaux classements. Une prise en charge a
également été ajoutée pour la comparaison de chaînes de caractères supplémentaires, basée
sur les points de code, et un indicateur binaire (BIN2) a été introduit pour autoriser de
véritables comparaisons de points de code.
Les classements binaires trient et comparent les données dans SQL Server en fonction du
modèle binaire de chaque caractère. Chaque classement binaire dans SQL Server s'associe à
un paramètre régional de langue spécifique et à une page de code ANSI, et chacun exécute
des tris de données sensibles à la casse et aux accents. Les classements binaires offrent les tris
de données les plus rapides.
L'option Binaire (_BIN) trie et compare des données dans les tables SQL Server en fonction
des modèles binaires définis pour chaque caractère. L'ordre de tri binaire tient compte de la
casse et des accents. Il est également l'ordre de tri le plus rapide. Si cette option n'est pas
sélectionnée, SQL Server suit les règles de tri et de comparaison définies dans les
dictionnaires de la langue ou l'alphabet associé.
L'option de point de code Binaire (_BIN2) trie et compare les données dans les tables
SQL Server en fonction des points de code Unicode pour les données Unicode. Pour les
données non Unicode, le point de code Binary utilisera des comparaisons identiques aux tris
binaires. L'avantage de l'utilisation d'un ordre de tri par point de code Binary est qu'il n'est pas
nécessaire de retrier les données dans les applications qui comparent des données SQL Server
triées. Par conséquent, un ordre de tri par point de code Binary facilite le développement
d'applications et offre des possibilités d'augmentation des performances.
L'annexe E contient une liste des classements mis à jour dans SQL Server 2005. À moins que
vous n'ayez besoin d'une compatibilité ascendante avec SQL Server 2000 ou des versions
précédentes, il est préférable d'utiliser les classements mis à jour.
Les classements dans SQL Server 2005 incluent les types de classement suivants : les
classements Windows et les classements SQL.
Classements Windows
Les classements Windows définissent des règles pour enregistrer les données de caractères en
fonction d'un paramètre régional Windows associé. (Il existe plus de paramètres régionaux
Windows que de classements Windows dans SQL Server). Les règles de base du classement
Windows spécifient quel alphabet ou langue est utilisé en cas d'application du tri par
dictionnaire, de même que la page de code utilisée pour enregistrer les données de caractères
non Unicode. Dans SQL Server, les classements Windows sont combinés avec une série de
suffixes pour définir précisément les règles de tri et de comparaison en fonction de la
sensibilité à la casse, aux accents, aux kana et à la largeur. Le nom de classement Windows
complet est composé de la désignation du classement et des styles de comparaison.
Dans un classement Windows, la comparaison et le tri de données non Unicode sont mis en
œuvre en utilisant le même algorithme que pour les données Unicode. Ceci assure une
cohérence entre les types de données dans SQL Server et permet également aux développeurs
de trier des chaînes dans leurs applications en utilisant les mêmes règles que celles utilisées
par SQL Server, c'est-à-dire en appelant la fonction CompareStringW de l'API Microsoft
Win32.
Classements binaires
Les classements binaires trient les données en fonction de la séquence de valeurs codées
définie par le paramètre régional et le type de données. Un classement binaire dans
SQL Server définit le paramètre régional linguistique et la page de code ANSI à utiliser, en
appliquant un ordre de tri binaire. Les classements binaires sont utiles pour améliorer les
performances des applications en raison de leur relative simplicité. Pour les types de données
non Unicode, les comparaisons de données sont basées sur les points de code définis dans la
page de code ANSI. Pour les types de données Unicode, les comparaisons de données sont
basées sur les points de code Unicode. Pour les classements binaires sur les types de données
Unicode, le paramètre régional n'est pas pris en compte dans le tri des données. Par exemple,
Latin_1_General_BIN et Japanese_BIN2 utilisés sur des données Unicode produisent des
résultats de tri identiques. La raison en est que le classement compare les données Unicode en
tant qu'Unicode et compare des données non Unicode en tant que binaires.
Dans SQL Server 2000, les classements binaires exécutaient une comparaison point de code à
point de code incomplète pour les données Unicode. Le premier caractère était comparé en
tant que WCHAR, suivi d'une comparaison octet par octet. Par souci de compatibilité
ascendante, la sémantique de classement binaire existante ne sera pas modifiée.
Les classements binaires dans SQL Server 2005 incluent à la fois le classement BIN
précédent et une nouvelle série de classements de comparaison de point de code pure. Les
clients peuvent choisir de migrer vers les nouveaux classements binaires pour profiter de
vraies comparaisons de point de code, et ils doivent utiliser les nouveaux classements binaires
quand ils développent de nouvelles applications. Le nouveau suffixe BIN2 identifie les noms
de classements qui implémentent la nouvelle sémantique de classement de point de code. De
plus, un nouvel indicateur de comparaison correspondant à BIN2 a été ajouté pour le nouveau
tri binaire.
SQL Server recommande automatiquement un classement par défaut en fonction des
paramètres régionaux du système. Vous ne devez modifier les paramètres pour classement
Windows par défaut que si votre installation SQL Server doit reprendre les paramètres de
classement utilisés par une autre instance de SQL Server, ou si le paramètre de classement
doit correspondre aux paramètres régionaux du système Windows d'un autre ordinateur.
Si vous avez besoin de gérer des caractères supplémentaires, changez le classement par défaut
pour l'un des nouveaux classements, qui prennent en charge les opérations de tri et de
comparaison sur les caractères supplémentaires. Ces comparaisons sont basées sur les points
de code uniquement, pas sur d'autres méthodes logiques d'un point de vue linguistique. Seules
les versions de classement 90, indiquées par le suffixe 90 ajouté à leurs noms, prennent en
charge ces opérations. Par exemple, au lieu du classement Japanese, utilisez Japanese_90. Si
vous n'utilisez pas un classement compatible avec les caractères supplémentaires, soyez
prudent lorsque vous utilisez des caractères supplémentaires dans les opérations telles que
ORDER BY, GROUP BY et DISTINCT, en particulier lorsque des caractères
supplémentaires et non supplémentaires sont inclus dans la même opération.
Classements SQL Server
Les classements SQL Server fournissent une compatibilité d'ordre de tri avec les versions
précédentes de SQL Server. (Pour une liste complète des classements SQL Server, consultez
la section Nom de classement SQL dans la documentation en ligne de SQL Server 2005). Les
classements SQL Server sont basés sur les ordres de tri SQL Server hérités pour les données
non Unicode (par exemple, les types de données char et varchar) définies par SQL Server.
Les règles de tri par dictionnaire des données non Unicode ne sont pas compatibles avec la
routine de tri fournie par les systèmes d'exploitation Windows, mais le tri de données Unicode
est compatible avec une version particulière des règles de tri de Windows. Les classements
SQL Server utilisant des règles de comparaison différentes pour les données non Unicode et
pour les données Unicode, vous pourriez obtenir des résultats différents pour les mêmes
comparaisons de données, en fonction du type de données sous-jacent.
Lorsque vous mettez à niveau une instance de SQL Server, vous pouvez spécifier des
classements SQL Server pour la compatibilité avec les instances existantes de SQL Server.
Comme le classement par défaut pour une instance de SQL Server est défini pendant
l'installation, il est important de spécifier soigneusement les paramètres de classement
lorsque :



votre code d'application dépend dans une certaine mesure du comportement des
classements SQL Server antérieurs ;
vous comptez utiliser la réplication SQL Server 2005 avec des installations existantes
de SQL Server 6.5 ou SQL Server 7.0 ;
vous devez enregistrer des données de caractères qui reflètent plusieurs langues.
Si vous avez un mélange de colonnes Unicode et non Unicode dans votre base de données,
vous devez utiliser en priorité les classements Windows. Les classements Windows
appliquent des règles de tri de base Unicode aux données Unicode et non Unicode. Cela
signifie que SQL Server convertit en interne les données non Unicode en Unicode pour
effectuer les opérations de comparaison. Ceci assure la cohérence dans les types de données
dans SQL Server et permet également aux développeurs de trier des chaînes de leurs
applications qui utilisent les mêmes règles que SQL Server.
Les classements SQL, d'autre part, appliquent des règles de tri non Unicode aux données non
Unicode et des règles de tri Unicode aux données Unicode, en utilisant un classement
Windows correspondant pour les données Unicode. Cette différence peut provoquer des
incohérences de résultats pour les comparaisons de caractères identiques. Donc, si votre base
de données contient à la fois des colonnes Unicode et non Unicode, celles-ci doivent toutes
être définies en utilisant les classements Windows de manière à utiliser les mêmes règles de
tri sur les données Unicode et non Unicode.
Compatibilité ascendante dans les classements
Le classement binaire BIN fourni dans SQL Server 2000 effectuait une comparaison de point
de code à point de code incomplète pour les données Unicode. Ces classements binaires
comparaient le premier caractère en tant que WCHAR, suivi d'une comparaison octet par
octet. Ceci pouvait provoquer un tri imprévu des données de caractères Unicode.
Pour garantir la compatibilité ascendante, la sémantique de classement binaire existante ne
sera pas modifiée. Cependant, cette fonctionnalité peut avoir été remplacée par les nouveaux
classements. L'annexe répertorie les classements qui ont été conservés pour assurer la
compatibilité ascendante avec SQL Server 2000 ou SQL Server 7.0.
Pour obtenir des informations sur les classements dans une base de données, vous pouvez
utiliser les vues système suivantes :
Vue Catalogue
sys.databases
sys.columns
COLLATIONPROPERTY
Description
Renvoie des informations sur le classement
d'une base de données.
Renvoie des informations sur le classement
d'une colonne d'une table ou d'une vue.
Renvoie des informations sur les classements
dans SQL Server 2005.
Vous pouvez transmettre la valeur CodePage,
ou LCID, qui renvoie les paramètres
d'identification locaux de Windows, ou Null
pour les classements SQL.
fn_helpcollations
Vous pouvez également spécifier Windows
ComparisonStyle (renvoie Null pour les
classements Binary et SQL). Vous pouvez
utiliser ComparisonStyle pour vérifier qu'il
existe une équivalence entre la normalisation
de chaîne dans Windows et dans SQL Server
pour le classement Windows.
Renvoie une liste des classements disponibles
dans SQL Server 2005.
SELECT * FROM ::fn_helpcollations()
SERVERPROPERTY
Dans SQL Server 2005, cette requête renvoie
1 011 classements. (Dans SQL Server 2000,
753 classements.)
Renvoie le classement associé au serveur.
SELECT CONVERT(char,
SERVERPROPERTY('collation'))
DATABASEPROPERTYEX
Détermine le classement d'une base de
données, par exemple :
SELECT CONVERT(char,
DATABASEPROPERTYEX('pubs',
'collation'))
Il n'est pas possible d'ajouter des classements supplémentaires, à moins qu'ils ne le soient dans
des Service Packs ou de futures versions.
Classements et tri de données
En règle générale, chaque classement défini dans SQL Server sur une colonne Unicode triera
tous les caractères Unicode définis. Cependant, il existe de nombreux classements différents,
car les méthodes possibles de tri des données sont elles-mêmes très diverses. Citons par
exemple le tri moderne du géorgien. Bien que le tri traditionnel du texte géorgien place tous
les caractères dans un ordre spécifique, il est courant dans l'usage moderne de placer certains
caractères rarement utilisés à la fin. Ces caractères sont HE (), HEI (), WE () et HAR (). Ainsi,
il existe deux façons de trier l'alphabet géorgien : traditionnel et moderne.
Figure 4. Ordre de tri traditionnel du géorgien
Figure 5. Ordre de tri moderne du géorgien
L'existence de ce classement n'empêche pas le tri des autres données Unicode selon l'ordre de
tri fourni dans le classement Latin1_General. Tous les classements, en fait, trient le géorgien
sous la forme traditionnelle, à la seule exception des classements Georgian_Modern_Sort. En
d'autres termes, les mêmes règles générales s'appliquent à tous les classements ; seules les
exceptions peuvent changer entre les classements.
Niveaux de classement
SQL Server 2005 prend en charge la configuration des classements aux niveaux suivants
d'une instance de SQL Server 2005 :




Niveau serveur
Niveau base de données
Niveau colonne
Niveau expression
Cette section explique ces niveaux de classement et comment ils interagissent lorsque
plusieurs classements sont utilisés.
Classements spécifiés au niveau du serveur
Le classement par défaut d'une instance de SQL Server est déterminé pendant l'installation. Le
classement par défaut de l'instance devient également le classement par défaut des bases de
données système. Après l'affectation d'un classement à n'importe quel objet (autre qu'une
colonne ou une base de données), vous ne pouvez pas modifier le classement à moins de
supprimer et de recréer l'objet. Au lieu de modifier le classement par défaut d'une instance de
SQL Server, vous pouvez spécifier le classement lorsque vous créez une nouvelle base de
données ou colonne de base de données.
Dans les versions précédentes, le classement était toujours défini au niveau du serveur et, dans
de nombreux cas, il s'agissait du seul classement que vous ayez jamais besoin de définir. Le
classement serveur sert de classement par défaut lors de la création d'une nouvelle base de
données sur le serveur, à moins que vous ne définissiez explicitement le classement au niveau
de la base de données. Dans la mesure où chaque base de données possède son propre
classement, il n'est fait référence au classement de niveau serveur que lors de la création
initiale de la base de données.
Dans SQL Server 2000, vous pouviez modifier le classement par défaut pour le serveur sans
réexécuter le programme d'installation, en utilisant l'utilitaire de reconstruction de base de
données principale (Rebuild Master, RebuildM.exe), situé dans le répertoire Program
Files\Microsoft SQL Server\80\Tools\BINN. Pour plus d'informations, consultez la section
Comment reconstruire la base de données principale (utilitaire Rebuild Master) dans la
documentation en ligne de SQL Server 2005 pour SQL Server 2000. Dans SQL Server 2005,
cet utilitaire n'est pas pris en charge. Vous utilisez à sa place l'option REBUILDDATABASE
dans Setup.exe. Toutefois, dans la mesure où le classement du serveur n'est pas souvent
utilisé, vous pouvez spécifier un classement par défaut pour chaque nouvelle base de données
que vous créez, au lieu de modifier le classement par défaut d'une instance de
SQL Server 2005.
Si vous devez modifier le classement par défaut pour une instance de SQL Server 2005, vous
devez d'abord écrire le script ou sauvegarder votre base de données, supprimer toutes les
bases de données utilisateur, puis reconstruire la base de données principale (en spécifiant le
nouveau classement dans la propriété SQLCOLLATION de la commande d'installation,
comme suit :
start /wait setup.exe /qb INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine
REBUILDDATABASE=1 SAPWD=test SQLCOLLATION=SQL_Latin1_General_CP1_CI_AI).
Classements au niveau de la base de données
Lors de la création d'une base de données, vous pouvez utiliser la clause COLLATE de
l'instruction CREATE DATABASE pour spécifier le classement par défaut de la base de
données. Si aucun classement n'est spécifié pendant la création de base de données, elle reçoit
le classement par défaut de la base de données modèle. Le classement par défaut de la base de
données modèle est identique au classement par défaut de l'instance de SQL Server.
Chaque base de données peut avoir un classement unique, avec l'ordre de tri défini au niveau
de la base de données. La figure 6 illustre le mode de définition du classement avec
SQL Server Management Studio.
Figure 6. Définition du classement de base de données en utilisant l'onglet Options de la
fenêtre de Propriétés de la base de données (Cliquer sur l'image pour l'agrandir)
Vous pouvez également déterminer l'ordre de classement en utilisant Transact-SQL. Par
exemple, pour créer une nouvelle base de données qui utilise l'ordre de tri tchèque et qui
respecte la casse et les accents, utilisez une instruction telle que :
USE master
GO
CREATE DATABASE Products
ON
( NAME = products_dat,
FILENAME = 'c:\program files\microsoft sql
server\mssql\data\products.mdf' )
COLLATE Czech_CS_AS
GO
Dans SQL Server 2005, vous pouvez également modifier le classement d'une base de données
existante à l'aide de SQL Server Management Studio. Dans SQL Server 2000, cette
fonctionnalité n'était pas disponible dans SQL Server Enterprise Manager. Vous deviez
utiliser l'instruction ALTER DATABASE. Par exemple, l'instruction suivante modifie le
classement de la base de données Products de Czech_CS_AS en Czech_CI_AI (respect de la
casse et des accents à non-respect de la casse et des accents).
ALTER DATABASE Products
COLLATE Czech_CI_AI
Éléments à prendre en compte avant de modifier le classement d'une base de données
Si vous avez des données dans un champ texte, varchar ou char et qu'il n'existe pas de
classement explicite sur la colonne, la modification du classement de la base de données
change la façon dont est interprété le codage des données, ce qui se traduit par une certaine
forme d'altération pour tous les caractères au-delà de la plage ASCII.
Par conséquent, évitez de modifier le classement de toute base de données contenant des
données de texte non Unicode, à moins que les données ne soient enregistrées dans des
colonnes possédant leurs propres paramètres de classement explicites.
Pour qu'il soit possible de modifier le classement d'une base de données, toutes les conditions
suivantes doivent être respectées :



Personne d'autre ne peut être en train d'utiliser la base de données.
Aucun objet lié au schéma ne doit dépendre du classement de la base de données. Les
objets liés au schéma sont notamment :
 les fonctions et vues définies par l'utilisateur, créées avec
SCHEMABINDING ;
 les colonnes calculées ;
 les contraintes CHECK ;
 les fonctions de table définie qui renvoient des tables avec des colonnes de
caractères et des classements hérités du classement de base de données par
défaut.
La modification du classement de la base de données ne crée pas de doublon dans les
noms système. Si des doublons sont détectés, une erreur est générée et l'opération de
modification du classement échoue.
Les objets susceptibles de causer de telles duplications incluent :


les noms d'objet (tels que procedure, table, trigger ou view) ;
les noms de schéma (tels que group, role ou user) ;




les noms de type scalaire (tels que system et les types définis par l'utilisateur) ;
les noms de catalogue en texte intégral ;
les noms de colonne ou de paramètre dans un objet ;
les noms d'index dans une table.
Par exemple, supposons que votre base de données contient deux tables nommées Table1 et
TABLE1 et que vous essayez de modifier le classement de French_CS_AS (respect de la
casse et des accents) en French_CI_AS (non-respect de la casse et des accents). Avec le
premier classement, il est possible d'avoir deux tables. Cependant, le passage au deuxième
classement génère des doublons.
Classements spécifiés au niveau de la colonne
Dans SQL Server 2005, vous pouvez spécifier le classement du texte dans une colonne
particulière. Cela peut être très utile, par exemple, si vous avez besoin de forcer la sensibilité à
la casse pour une colonne de mots de passe. Les autres scénarios dans lesquels les classements
au niveau des colonnes pourraient être utiles impliquent plusieurs langues dans la même table.
Par exemple, il faudra parfois utiliser Unicode avec le classement Latin1_General dans la
colonne des noms de clients pour activer le tri pertinent à une variété de noms, tandis que la
colonne de la gamme de produits peut déjà contenir du grec, et pour cette colonne, il peut être
judicieux d'utiliser un classement Greek. La figure 7 montre comment choisir un classement
et définir les options d'ordre de tri pendant la conception de la table.
Figure 7. Spécification d'un classement
Si vous n'avez pas précédemment défini un classement sur la colonne, lorsque vous cliquez
sur cette dernière, la boîte de dialogue affiche <base de données par défaut> en tant que
propriété Classement de la colonne. Pour modifier le classement, cliquez sur le bouton
représenté par des points de suspension (...). Vous ouvrez ainsi la boîte de dialogue
Classement dans laquelle vous sélectionnez un classement Windows ou un classement
SQL Server et définissez les options de tri.
Lorsque vous sélectionnez un classement Windows, vous pouvez spécifier si le classement est
sensible à la casse, aux accents, au type de kana et à la largeur.
Vous pouvez également déterminer les classements au niveau des colonnes à l'aide de
Transact-SQL en ajoutant une clause COLLATE à la définition de la colonne dans
l'instruction CREATE TABLE.
L'exemple suivant montre comment utiliser Transact-SQL pour spécifier un classement pour
la colonne de description de la fonction qui est définie sur Arabe et qui est insensible à la
casse, aux accents et au type de kana.
CREATE TABLE jobs
(
job_id smallint
IDENTITY(1,1)
PRIMARY KEY CLUSTERED,
job_desc varchar(50)
COLLATE Arabic_CI_AI_KS
NOT NULL
DEFAULT 'New Position - title not formalized yet',
)
Vous pouvez également utiliser l'instruction ALTER TABLE pour modifier le classement au
niveau d'une colonne (mais pas d'une colonne ntext ou text). Si la clause COLLATE n'est pas
spécifiée, la modification d'un type de données entraîne la modification du classement de la
colonne qui passe au classement par défaut de la base de données.
Dans SQL Server 2005, vous pouvez également modifier le classement par programmation en
utilisant la propriété column.collation dans les objets SMO (SQL Management Objects).
La clause COLLATE peut être utilisée pour modifier le classement des colonnes des types de
données char, varchar, nchar et nvarchar uniquement. Pour modifier le classement d'une
colonne de type de données d'alias défini par l'utilisateur, vous devez exécuter des instructions
ALTER TABLE séparées pour changer la colonne en type de données de système SQL Server
et modifier son classement, puis modifier à nouveau cette colonne et la ramener à un type de
données d'alias.
ALTER COLUMN ne peut pas avoir une modification de classement si une ou plusieurs des
conditions suivantes existent :


Si une contrainte CHECK ou FOREIGN KEY ou une colonne calculée référence la
colonne qui est modifiée.
Si des index, statistiques ou index en texte intégral sont créés sur la colonne. Les
statistiques créées automatiquement sur la colonne modifiée sont supprimées si le
classement de la colonne est modifié.

Si un affichage ou une fonction lié au schéma-référence la colonne.
Vous pouvez insérer ou mettre à jour des valeurs dans une colonne de texte dont le classement
est différent de la page de code du classement par défaut de la base de données. SQL Server
convertit implicitement les valeurs au classement de la colonne.
Classements spécifiés dans les expressions
Les classements au niveau des expressions sont définis au moment où une instruction est
exécutée ; ils affectent la façon dont un ensemble de résultats est renvoyé. Ceci permet de trier
les résultats de sorte que la clause ORDER BY soit spécifique à la langue.
Pendant l'installation de SQL Server, vous êtes invité à sélectionner les classements Windows
ou les classements binaires. Votre choix de classement a un effet sur la comparaison des
données et l'ordre de tri de votre instance de Microsoft SQL Server.
Il peut y avoir de nombreux cas dans lesquels vous devrez afficher des données à l'intention
de personnes de pays différents et souhaiterez un tri approprié pour chaque pays. Dans les
versions 2000 et 2005 de SQL Server, vous pouvez spécifier des classements dans les
expressions. Cette puissante fonctionnalité vous permet d'organiser le tri de sorte que la clause
ORDER BY soit spécifique à la langue.
Par exemple, la requête suivante sur la base de données AdventureWorks trie la table
Person.Address en fonction de la ville figurant dans l'adresse. L'ordre de tri lituanien illustre
bien les différences de classements parce que les règles concernant le tri de la lettre Y sont
extrêmement remarquables.
SELECT *
FROM Person.Address
ORDER BY City COLLATE Lithuanian_CI_AI
L'exemple suivant suppose que Table1 n'a pas de classement explicite au niveau des
colonnes. Dans ce cas, les deux colonnes sont comparées en utilisant l'ordre de tri turc.
SELECT
*
FROM Table1
WHERE Field1 = Field2 COLLATE Turkish_ci_ai
Pour savoir comment les classements sont utilisés dans les comparaisons, consultez la section
« Règles de priorité des classements », plus loin dans ce document.
Mot-clé COLLATE
Un classement peut être défini au niveau de la base de données, au niveau des colonnes ou
dans une expression. Pour spécifier le classement d'une base de données, d'une colonne ou
d'une expression de caractères, utilisez la syntaxe suivante :
COLLATE [<Windows_Collation_name>|<SQL_Collation_Name]
Si la colonne n'est pas définie à l'aide d'un type de données Unicode (ntext, nvarchar,
nvarchar(max)), nchar), le classement est converti en page de code.
Le mot-clé COLLATE vous permet d'utiliser les deux types de classements suivants :
Classements Windows
Ils sont définis par Windows. Vous pouvez modifier des options pour spécifier la sensibilité à
la casse, aux accents, au kana et à la largeur, et vous pouvez choisir un ordre de tri binaire.
Classements SQL
Ces classements sont proposés à des fins de compatibilité ascendante. Vous ne pouvez pas
configurer l'ordre de tri.
Essayez d'utiliser les classements Windows autant que possible. L'exemple suivant présente
une liste d'indicatifs et de noms de pays, et montre comment le comportement du tri peut
changer en fonction du classement. La partie supérieure de la fenêtre des requêtes affiche la
liste triée par les classements par défaut ; la partie inférieure de la fenêtre affiche les mêmes
données triées par le classement lituanien.
Dans le classement par défaut, affiché en premier, Y se situe entre X et Z. Dans le classement
lituanien, le classement suivant, Y est entre I et J.
Figure 8. Effet du classement lituanien sur le tri (Cliquez sur l'image pour l'agrandir)
Règles de priorité des classements
Étant donné que vous pouvez spécifier des classements au niveau du serveur, de la base de
données, des colonnes et des expressions, il est important de comprendre l'interaction qui
existe entre les classements. La priorité de classement détermine la façon dont les expressions
renvoyant à une chaîne de caractères sont assemblées et le classement utilisé par les
opérateurs qui emploient des entrées de chaînes de caractères mais ne renvoient pas de chaîne
de caractères, tels que LIKE et IN.
Les règles de priorité de classement de SQL Server 2005 s'appliquent uniquement aux
données de types chaîne de caractères char, varchar, text, nchar, nvarchar et ntext. Les
objets qui ont d'autres types de données ne participent pas aux évaluations de classement.
Les opérateurs de comparaison et les opérateurs MAX, MIN, BETWEEN, LIKE et IN sont
sensibles au classement. La chaîne utilisée par les opérateurs reçoit l'étiquette de classement
de l'opérande assorti de la priorité la plus élevée. L'opérateur UNION est également sensible
au classement, et tous les opérandes de chaîne et le résultat final reçoivent le classement de
l'opérande assorti de la priorité la plus élevée. La priorité de classement des opérandes
UNION et les résultats sont évalués par colonne.
L'opérateur d'attribution est sensible au classement, et la bonne expression est convertie au
classement de gauche.
L'opérateur de concaténation de chaîne est sensible au classement. Les deux opérandes de
chaîne et le résultat reçoivent l'étiquette de classement de l'opérande assorti de la plus priorité
la plus élevée. Les opérateurs UNION ALL et CASE ne sont pas sensibles au classement, et
tous les opérandes de chaîne et les résultats finaux reçoivent l'étiquette de classement de
l'opérande assorti de la priorité la plus élevée. La priorité de classement des opérandes
UNION ALL et les résultats sont évalués par colonne.
Étant donné que les objets peuvent avoir des classements différents à divers niveaux,
SQL Server 2005 introduit les étiquettes de classement pour vous aider à gérer l'interaction
complexe des classements. Une étiquette de classement nomme une catégorie d'objets qui
peuvent prendre un classement. Les règles de classement sont décrites en termes d'interactions
entre les étiquettes de classement.
Si une expression référence seulement un objet de chaîne de caractères, l'étiquette de
classement de l'objet référencé est utilisée. Si l'expression référence deux expressions
d'opérande qui ont la même étiquette de classement, celle-ci devient l'étiquette de classement
de l'expression d'opérande.
Si une expression complexe référence deux expressions d'opérande avec des classements
différents, l'étiquette de classement du résultat final utilise une série de règles pour déterminer
la priorité des classements. Pour plus d'informations, consultez la section Priorité des
classements (Transact-SQL) dans la documentation en ligne de SQL Server 2005.
La liste suivante décrit les différents types d'étiquettes de classement. Cette liste est suivie par
un tableau qui résume les interactions possibles des étiquettes de classement.
Explicit
Un classement est explicitement défini pour une expression donnée ou explicitement converti
à un classement spécifique (X) en utilisant une clause COLLATE dans l'expression.
Implicit
Une colonne est référencée. Même si un classement est explicitement affecté à une colonne à
l'aide d'une clause COLLATE dans l'instruction CREATE TABLE ou CREATE VIEW, une
référence de colonne est classée comme implicite.
Coercible-Default
Le classement au niveau des bases de données est utilisé pour n'importe quelle variable de
chaîne de caractères Transact-SQL, paramètre, valeur littérale, sortie d'une fonction intégrée à
un catalogue ou sortie d'une fonction intégrée qui n'accepte pas les entrées de chaînes mais
produit une sortie de chaînes.
Si l'objet est déclaré dans une fonction définie par l'utilisateur, une procédure enregistrée ou
un déclencheur, l'objet reçoit le classement par défaut de la base de données dans laquelle la
fonction, la procédure enregistrée ou le déclencheur est créé. Si l'objet est déclaré dans un lot,
il reçoit le classement par défaut de la base de données actuelle pour la connexion.
No Collation
Lorsque la valeur d'une expression est le résultat d'une opération entre deux chaînes qui ont
des classements contradictoires de l'étiquette de classement implicite, le résultat de
l'expression est défini comme n'ayant pas de classement.
Explicit C1
Implicit C1
Run-time Error Explicit C1
Explicit C2
Explicit C2
No Collation
Implicit C1
Explicit C2
Implicit C2
Par défaut
No Collation
No Collation Explicit C2
Par défaut
Explicit C1
Implicit C1
Par défaut
No Collation
No Collation
Explicit C1
No Collation
No Collation
No Collation
Ce tableau montre que la seule fois où SQL Server ne peut pas traiter une expression est
lorsque vous définissez explicitement deux classements différents et contradictoires ou
lorsque vous essayez de comparer deux éléments et qu'aucun point commun pour la
comparaison ne peut être trouvé.
Par exemple, examinons l'instruction Transact-SQL suivante servant à créer une table :
CREATE TABLE TestTab (
id int,
GreekCol nvarchar(10) COLLATE greek_ci_as,
LatinCol nvarchar(10) COLLATE latin1_general_cs_as
)
INSERT TestTab VALUES (1, N'A', N'a')
GO
Cette instruction crée une table comprenant une colonne utilisant un classement Greek
insensible à la casse et sensible aux accents et une deuxième colonne utilisant un classement
General Latin1 sensible à la casse et aux accents.
Vous pouvez essayer d'utiliser une requête pour comparer les deux explicitement :
SELECT *
FROM TestTab
WHERE GreekCol = LatinCol
Cependant, la requête renvoie une erreur :
Msg 468, Level 16, State 9, Line 1
Cannot resolve the collation conflict between "Latin1_General_CS_AS"
and "Greek_CI_AS" in the equal to operation.
L'erreur survient parce que le serveur ne peut pas comparer deux segments de texte qui ont
des classements différents. Si, toutefois, vous utilisez le mot-clé COLLATE pour créer
explicitement une expression qui les autorise à être compatibles, comme indiqué dans
l'exemple suivant, la requête aboutit :
SELECT *
FROM TestTab
WHERE GreekCol = LatinCol COLLATE greek_ci_as
Bien que LatinCol ait généralement un classement sensible à la casse, le classement insensible
à la casse de l'expression remplace la sensibilité à la casse et permet au A majuscule et A
minuscule d'être traités de la même façon.
La sensibilité au classement d'une fonction dépend du type de données des entrées. Les
fonctions CAST, CONVERT et COLLATE sont sensibles au classement pour les types de
données char, varchar et text. Si les entrées et sorties des fonctions CAST et CONVERT
sont des chaînes de caractères, la chaîne de sortie a l'étiquette de classement de la chaîne
d'entrée. Si l'entrée n'est pas une chaîne de caractères, la chaîne de sortie est Coercibledefault. Dans ce cas, elle reçoit le classement de la base de données actuelle pour la
connexion ou de la base de données qui contient la fonction définie par l'utilisateur, la
procédure enregistrée ou le déclencheur dans lequel CAST ou CONVERT est référencé.
Pour les fonctions prédéfinies qui renvoient une chaîne mais ne prennent pas une entrée de
chaîne, la chaîne de résultat est Coercible-default et reçoit soit le classement de la base de
données actuelle soit le classement de la base de données qui contient la fonction définie par
l'utilisateur, la procédure enregistrée ou le déclencheur dans lequel la fonction est référencée.
Restrictions du mot-clé COLLATE
Le mot-clé COLLATE et les fonctionnalités qui lui sont associées sont puissants et offrent
une grande flexibilité au développeur de bases de données internationales. Il existe, toutefois,
des restrictions. Ces restrictions et leurs solutions respectives sont répertoriées dans cette
section.
Renvoyer moins d'une liste complète de classements
La fonction fn_helpcollations renvoie une liste de tous les classements fournis par
SQL Server. Les exceptions sont représentées par trois classements qui sont désapprouvés et
ne s'affichent pas dans ::fn_helpcollations(). Le classement hindi est désapprouvé dans
SQL Server 2005 parce que la table de tri de Windows 2000 Bêta 2 est utilisée dans cette
version de SQL Server. Le classement existe toujours dans le serveur, mais il ne sera pas pris
en charge dans une future version SQL Server. Les classements Hindi et Lithuanian_Classic
sont désapprouvés dans SQL Server 2005. Ces classements existent toujours dans le serveur,
mais ils ne seront pas pris en charge dans une version future de SQL Server.
Si vous souhaitez travailler par programmation avec les classements, vous devez fournir une
interface utilisateur pour cette fonctionnalité vous-même.
Conversion implicite
La conversion implicite de données de caractères non Unicode entre les classements est non
déterministe. La conversion implicite de données de caractères non Unicode entre les
classements est également considérée comme non déterministe, à moins que le niveau de
compatibilité soit déterminé à 80 ou moins.
Dans les versions précédentes de SQL Server, les noms d'objets de système et de types de
système étaient comparés au classement de la base de données principale. Dans
SQL Server 2005, les noms d'objets de système et de types de système sont convertis
automatiquement de sorte à correspondre au classement de la base de données actuelle. Si les
références à ces objets de votre script ou de vos applications ne correspondent pas à leur
affichage dans le catalogue et que le classement de la base de données actuelle provoque une
incohérence, le script ou l'application risque d'échouer. Par exemple, l'instruction EXEC
SP_heLP échoue si la base de données actuelle a un classement sensible à la casse.
Problèmes liés à la définition de classement au niveau des colonnes
Une base de données peut parfois nécessiter un ordre de tri (par exemple, Latin1_General)
tandis que les colonnes individuelles ont besoin d'un autre (par exemple, Greek). De même, la
base de données peut parfois contenir des données multilingues qui doivent être triées suivant
plus d'un classement. Dans ce cas, vous ne pouvez pas définir un seul classement. Dans les
deux cas, si vous avez la possibilité de définir plusieurs classements, et que chacun d'eux peut
être indexé, vous pouvez accéder aux données de chaque langue cible en spécifiant le
classement correct. Par exemple, vous pouvez afficher plus facilement les données grecques
en spécifiant le classement Greek.
En outre, en spécifiant le classement supplémentaire, vous pouvez utiliser la recherche
indexée dans les requêtes concernant ces données. La possibilité d'indexer la colonne pour la
recherche est une condition critique. Dans l'exemple du paragraphe précédent, l'utilisation
d'une expression COLLATE dans la clause ORDER BY d'une requête fournit la
fonctionnalité nécessaire pour trier les données ; toutefois, le tri ne sera pas indexé et les
résultats de la requête seront donc renvoyés plus lentement dans de gros datasets. Pour cette
raison, le classement au niveau des colonnes n'est intéressant que si vous n'avez pas de
données unilingues dans une colonne ou si vous dénormalisez votre base de données pour
enregistrer différentes langues dans différentes colonnes.
Classements et tempdb
La base de données tempdb est générée à chaque fois que SQL Server est lancé ; tempdb a
toujours le même classement par défaut que la base de données model. Ce classement est
généralement identique au classement par défaut de l'instance. Si vous créez une base de
données d'utilisateur et spécifiez un classement par défaut autre que model, cette base de
données a un classement par défaut autre que tempdb. Toutes les procédures enregistrées
temporaires et toutes les tables temporaires sont créées et enregistrées dans tempdb. Ceci
signifie que toutes les colonnes implicites des tables temporaires et les constantes, variables et
paramètres Coercible-default des procédures enregistrées temporaires ont des classements
différents de ceux d'objets similaires créés dans les tables permanentes et les procédures
enregistrées.
Ceci risque de causer des problèmes d'incohérence dans les classements entre les bases de
données définies par l'utilisateur et les objets de bases de données système. Par exemple,
supposons qu'une instance de SQL Server 2005 utilise le classement Latin1_General_CS_AS
et que vous exécutiez les instructions suivantes :
CREATE DATABASE TestDB COLLATE Estonian_CS_AS;
USE TestDB;
CREATE TABLE TestPermTable (PrimaryKey int PRIMARY KEY, Col1 nchar );
INSERT TestPermTable VALUES (1, 'a')
Ensuite, créez une table temporaire avec les mêmes déclarations de colonnes que
TestPermTab en utilisant les instructions suivantes :
CREATE TABLE #TestTempTable (PrimaryKey int PRIMARY KEY, Col1 nchar )
INSERT #TestTempTable
SELECT * FROM TestPermTable
GO
Dans ce système, la base de données tempdb utilise le classement
SQL_Latin1_General_CP1_CI_AS (page de code 1252) tandis que TestDB et
TestPermTable.Col1 utilisent le classement Estonian_CS_AS collation (page de code 1257).
Ensuite, vous effectuez une requête pour les lignes qui doivent être identiques à l'aide des
instructions suivantes :
SELECT * FROM TestPermTable t1
JOIN #TestTempTable t2
ON t1.Col1 = t2.Col1
Étant donné que tempdb utilise le classement de serveur par défaut et que
TestPermTable.Col1 utilise un classement différent, SQL Server renvoie cette erreur :
"Msg 468, Level 16, State 9, Line 1
Cannot resolve the collation conflict between
"SQL_Latin1_General_CP1_CI_AS" and "Estonian_CS_AS" in the equal to
operation."
Pour éviter l'erreur, vous pouvez appliquer l'une des solutions suivantes :


Spécifiez que la colonne de la table temporaire utilise le classement par défaut de la
base de données d'utilisateur et non pas tempdb. Votre table temporaire peut ainsi
fonctionner avec les tables de même format dans plusieurs bases de données, si cela
est exigé de votre système.
Spécifiez explicitement le bon classement pour la colonne #TestTempTable. Vous
pouvez effectuer cette opération en utilisant le mot-clé COLLATE dans la définition
de la colonne.
LCID et classements
Windows utilise la référence géographique (LCID) pour définir les ordres de tri. Si vous ne
connaissez pas le LCID, vous pouvez utiliser le LCID par défaut en indiquant 1024 ou
formater vos données en utilisant les fonctions de formatage de Microsoft .NET. Dans une
application ASP Web, vous pouvez utiliser la fonction SetLocale de Microsoft Visual
Basic Scripting Edition (VBScript) pour utiliser les préférences de formatage des date/heure,
des chiffres et de la devise de n'importe quelle région. Toutefois, vu qu'il n'existe pas de
mappage direct entre le LCID et les classements, vous ne pouvez pas déterminer le bon
classement à partir d'un LCID.
Ceci n'est pas très pratique si vous souhaitez pouvoir attribuer automatiquement le meilleur
ordre de tri aux utilisateurs en fonction de leurs paramètres régionaux. Par exemple, si vous
avez un site Web multilingue visité par des personnes de différents pays souhaitant consulter
les informations sur les produits, vous pouvez choisir de mapper les variables
HTTP_ACCEPT_LANGUAGE fournies par leurs navigateurs aux LCID pour formater la
date et la devise en utilisant la propriété Session.LCID. Pour des raisons d'utilisabilité, vous
pouvez également décider d'implémenter le tri en utilisant leurs paramètres régionaux.
Pour générer votre propre fonction de mappage et contourner ce problème, vous pouvez
utiliser la liste d'indicateurs de classement proposée dans le programme d'installation. Un
indicateur de classement fournit un mappage entre un classement spécifique et un classement
standard. Pour obtenir une liste de paramètres régionaux du système et les classements par
défaut recommandés, consultez la section Paramètres des classements dans le programme
d'installation dans la documentation en ligne de SQL Server 2005.
Voici des exemples de classements standard utilisés pour le mappage :




Latin1_General peut être utilisé pour le jeu de caractères anglais américain (page de
code 1252).
Modern_Spanish peut être utilisé pour toutes les variations de l'espagnol qui utilisent
le même jeu de caractères que l'anglais américain (page de code 1252).
L'arabe peut être utilisé pour toutes les variations de l'arabe qui utilisent le jeu de
caractères arabe (page de code 1256).
Japanese_Unicode peut être utilisé pour la version Unicode du japonais dont l'ordre de
tri est différent de celui du japonais mais dont la page de code est la même (932).
Vous pouvez également spécifier l'ordre de tri à utiliser avec l'indicateur de classement que
vous avez sélectionné. L'ordre de tri binaire est l'ordre de tri le plus rapide. Il est sensible à la
casse. Si un ordre de tri binaire est sélectionné, vous ne pouvez pas utiliser les options
sensibles à la casse, aux accents, au kana et à la largeur.
Chaînes ISO et classements
Dans VBScript, vous pouvez obtenir la variable HTTP_ACCEPT_LANGUAGE avec un
script tel que :
Dim stLang
stLang = Request.ServerVariables("HTTP_ACCEPT_LANGUAGE")
Étant donné que beaucoup de développeurs Web utilisent cette valeur comme information sur
les paramètres régionaux, la fonction SetLocale de VBScript a été conçue de sorte à accepter
directement cette valeur en même temps que les valeurs de LCID. Ceci signifie que vous
n'avez pas à suivre l'étape intermédiaire consistant à mapper la valeur à un LCID. Pour chaque
chaîne représentant une région, telle que « en-us » (anglais États-Unis) ou « vi » (vietnamien),
vous devez mapper au classement approprié, Latin1_General ou un classement vietnamien par
exemple.
Classements personnalisés
Les développeurs souhaitent souvent définir leurs propres classements. Cependant, vu que
tous les nouveaux classements de SQL Server sont dérivés des classements de Windows, il
n'est pas possible de créer de nouveaux classements.
De plus, un classement doit être conçu de sorte à définir la méthode de tri de chaque caractère
défini dans la norme Unicode, et il n'existe pas d'interface utilisateur pour créer de nouveaux
classements.
Classement et caractères supplémentaires
Vous ne pouvez utiliser des caractères supplémentaires dans les opérations de tri et de
comparaison que si vous utilisez un des classements _90. Ces comparaisons sont seulement
basées sur les points de code et non pas sur d'autres méthodes pertinentes du point de vue
linguistique. Faites attention lorsque vous utilisez des caractères supplémentaires dans les
opérations telles que ORDER BY, GROUP BY et DISTINCT, surtout lorsque les caractères
supplémentaires et non supplémentaires sont inclus dans la même opération.
Étant donné que les caractères supplémentaires sont enregistrés sous forme de paires de deux
caractères Unicode codés sur deux octets, la fonction LEN () renvoie la valeur 2 pour chaque
caractère supplémentaire qui est contenu dans la chaîne d'argument. De même, les fonctions
CHARINDEX et PATINDEX ne représentent pas correctement l'occurrence de caractères
supplémentaires à l'intérieur des chaînes de caractères, et la fonction NCHAR renvoie un
caractère qui représente seulement la moitié de la paire de caractères supplémentaires. La
conversion d'une valeur de type binary ou varbinary à un caractère supplémentaire ne
produit également que la moitié d'une paire de caractères supplémentaires.
Les fonctions LEFT, RIGHT, SUBSTRING, STUFF et REVERSE peuvent séparer des paires
de caractères supplémentaires et conduire à des résultats imprévus.
Dans SQL Server 2005, il est possible de contourner les restrictions des fonctions du système
lorsque vous utilisez des caractères supplémentaires à l'aide de fonctions CLR définies par
l'utilisateur. Pour plus d'informations sur la manière de créer et utiliser des fonctions gérant
les caractères supplémentaires à l'aide de code géré dans le CLR .NET Framework, consultez
les exemples fournis avec SQL Server 2005. L'un de ces exemples, l'exemple
StringManipulate, démontre le traitement des chaînes de caractères supplémentaires et
l'implémentation des fonctions de chaîne LEN(), LEFT(), RIGHT(), SUBSTRING() and
REPLACE(), mais avec une fonctionnalité de reconnaissance des caractère supplémentaires
permettant de gérer les chaînes de caractères supplémentaires et Unicode. L'exemple inclut
des scripts en C# ou Visual Basic .NET, ainsi qu'un script Transact-SQL pour le chargement
de l'assembly et la création des fonctions dans SQL Server. Pour plus d'informations sur les
exemples disponibles, consultez la section Création de fonctions CLR dans la documentation
en ligne de SQL Server 2005.
Communications serveur-client (Technologies d'accès aux
données)
Dans les applications de base de données, l'utilisation d'outils SQL Server tels que
SQL Server Management Studio ne suffit pas. En général, le serveur interagit avec les autres
serveurs ou les clients, en utilisant une ou plusieurs des normes d'accès aux données. Dans ce
contexte, l'application ou la couche qui se connecte à SQL Server est le client. Dans ce
document, il existe deux types de clients :


Clients Unicode : SQL Native Client, OLE DB et ODBC versions 3.7 et ultérieures
(MDAC 2.8 et versions ultérieures)
Clients non Unicode : ODBC version 3.7 et versions antérieures et DB-Library
(MDAC 2.xx)
Cette section présente les technologies d'accès aux données qui sont disponibles et aborde
brièvement les problèmes que vous risquez de rencontrer lorsque vous travaillez avec des
données multilingues dans un environnement client-serveur.
DB-Library
Bien que le moteur de base de données de SQL Server 2005 prenne toujours en charge les
connexions des applications existantes qui utilisent les API DB-Library et Embedded SQL, il
n'inclut pas les fichiers ou la documentation nécessaires pour effectuer un travail de
programmation sur les applications qui utilisent ces API. Une version future du moteur de
base de données de SQL Server n'inclura pas la prise en charge des connexions à partir des
applications DB-Library ou Embedded SQL. En outre, il n'existe pas de version Unicode de
DB-Library.
N'utilisez donc pas DB-Library pour développer de nouvelles applications. En outre,
supprimez toute dépendance envers DB-Library en modifiant des applications existantes. Au
lieu de ces API, utilisez l'espace de noms SQLClient ou une API telle que OLE DB ou
ODBC.
SQL Server 2005 n'inclut pas la DLL DB-Library nécessaire pour exécuter ces applications.
Pour exécuter des applications DB-Library ou Embedded SQL, vous devez avoir la DLL DBLibrary de SQL Server 6.5, SQL Server 7.0 ou SQL Server 2000 à votre disposition.
SQL-DMO
SQL-DMO (SQL Distributed Management Objects) est une couche COM qui encapsule la
base de données SQL Server et la gestion des réplications. Dans la mesure où il s'agit d'une
couche COM, les règles qui sont appliquées à ADO et OLE DB s'appliquent également à
SQL-DMO. SQL-DMO a également des propriétés qui peuvent être utilisées pour les
fonctionnalités mentionnées précédemment, telles que la propriété Collation sur les objets
SQLServer2, Database2, Column2, SystemDateType2 et UserDefinedDataType2.
OLE DB
OLE DB est le composant central de MDAC (Microsoft Data-Access Components). OLE DB
est basé sur COM, et toutes les chaînes sont donc des BSTR Unicode (UTF-16 dans
Windows XP, Windows Server 2003 et Windows 2000 ; UCS-2 dans tous les autres systèmes
d'exploitation). Cependant, les versions de MDAC antérieures à MDAC 2.8 SP1 ne prennent
pas en charge les instances nommées. Il est possible que les applications ne puissent pas se
connecter aux instances nommées de SQL Server 2005. Pour tirer parti des fonctionnalités de
SQL Server 2005, effectuez une mise à niveau vers MDAC 2.8 SP1.
Version
SQL Server 7.0
SQL Server 2000
SQL Server 2005
Data-Access Library
MDAC version 2.1
MDAC version 2.6
MDAC version 2.8
Pour SQL Server, le fournisseur est le fournisseur Microsoft OLE DB pour SQL Server
(SQLOLEDB). Les données sont converties à Unicode le cas échéant, à l'aide du classement
des données réelles.
ADO
Les objets de données Microsoft ActiveX® (ADO) constituent une interface Visual Basic et
de script conviviale qui agit comme un wrapper autour d'OLE DB. Il s'agit également d'un
composant COM, qui prend donc en charge Unicode. Il est impossible de découpler ADO et
OLE DB de façon à permettre les conversions entre les deux ; s'il existe des problèmes, ils
concernent par conséquent toujours la couche OLE DB.
ODBC
Certaines versions d'ODBC prennent en charge Unicode. Un problème important concernant
les données non Unicode réside dans la façon dont les données sont traduites entre les pages
de code ou depuis et vers Unicode lorsque ODBC est utilisé. Lorsque vous utilisez une
version d'ODBC antérieure à 3.7, les données sont converties d'Unicode à ANSI à l'aide de la
page de code système par défaut. Même si vous installiez une version d'ODBC ultérieure,
Jet 3.5 effectuerait la même conversion.
Il existe deux paramètres possibles de l'attribut SQL_COPT_SS_TRANSLATE lorsqu'il est
envoyé à SQLSetConnectAttr :

SQL_XL_OFF
Le pilote ne traduit pas les caractères d'une page de code vers une autre en données de
caractères échangées entre le client et le serveur.

SQL_XL_ON
Le pilote traduit les caractères d'une page de code vers une autre en données de
caractères échangées entre le client et le serveur. Le pilote configure automatiquement
la traduction des caractères, en déterminant la page de code installée sur le serveur et
utilisée par le client.
Par défaut, c'est l'attribut SQL_XL_ON qui est utilisé. Vous pouvez également le définir en
utilisant la méthode SQL-DMO TranslateChar de l'objet SQLServer. Généralement, ce
paramètre par défaut fournit le comportement souhaité (l'activation d'auto_translate) chaque
fois que vous traitez des données non Unicode.
Si vous décidez de désactiver auto-translate, vous devez en comprendre les conséquences. Les
développeurs désactivent souvent auto-translate car ils supposent que ceci permettra au client
et au serveur de communiquer sans avoir à faire correspondre les pages de code. Toutefois,
cette interaction n'est pas prise en charge. En outre, avant de trier et d'analyser les données
non Unicode définies avec un classement Windows, SQL Server convertit d'abord les données
à Unicode. Ainsi, si auto-translate est désactivé, les données Unicode traduites risquent de ne
pas être correctement traduites vers leur page de code non Unicode originale lorsqu'elles sont
récupérées par le côté client.
Microsoft SQL Native Client
Microsoft SQL Native Client (précédemment connu sous le nom de SQL Native Client) a été
conçu pour proposer une méthode d'accès simplifiée aux données natives de SQL Server à
l'aide d'OLE DB ou ODBC. Il combine les technologies OLE DB et ODBC dans une
bibliothèque et propose une manière d'innover et de créer de nouvelles fonctionnalités d'accès
aux données sans changer les composants MDAC actuels qui font maintenant partie de la
plate-forme Microsoft Windows.
Si vous ne souhaitez pas utiliser les nouvelles fonctionnalités de SQL Server 2005, vous
n'avez pas besoin d'utiliser le fournisseur OLE DB de SQL Native Client ; vous pouvez
continuer à utiliser votre fournisseur d'accès aux données actuel, en général SQLOLEDB. Si
vous améliorez une application existante et souhaitez utiliser les nouvelles fonctionnalités de
SQL Server 2005, utilisez le fournisseur OLE DB de SQL Native Client.
SQL Native Client utilise des composants dans MDAC, mais n'est pas explicitement
dépendant d'une version particulière de MDAC.
Pour les nouvelles applications, si vous utilisez un langage de programmation géré tel que
Microsoft Visual C#.NET ou Visual Basic.NET et que vous avez besoin d'accéder aux
nouvelles fonctionnalités de SQL Server 2005, utilisez le fournisseur de données
.NET Framework pour SQL Server qui fait partie de .NET Framework pour
Visual Studio 2005. Celui-ci constitue le composant d'accès aux données le plus robuste pour
SQL Server 2005.
Si vous développez une application COM et que vous avez besoin d'accéder aux nouvelles
fonctionnalités de SQL Server 2005, utilisez SQL Native Client. SQL Native Client prend en
charge l'accès aux bases de données SQL Server précédentes en commençant par
SQL Server 7.0 et les versions plus récentes.
Pour les applications OLE DB et ODBC, la question principale est de savoir si vous avez
besoin d'accéder aux nouvelles fonctionnalités de SQL Server 2005. Si vous disposez d'une
application mûre qui n'a pas besoin des nouvelles fonctionnalités de SQL Server 2005, vous
pouvez continuer à utiliser MDAC. Toutefois, les valeurs renvoyées des type de données
varchar(max), nvarchar(max), varbinary(max), xml, UDT ou d'autres types d'objets
similaires ne peuvent pas être renvoyées aux versions client antérieures à SQL Server 2005. Si
vous souhaitez utiliser ces types comme valeurs renvoyées, vous devez utiliser
SQL Native Client.
MDAC et SQL Native Client fournissent tous deux un accès de données natif aux bases de
données SQL Server, mais SQL Native Client a été surtout conçu pour exposer les nouvelles
fonctionnalités de SQL Server 2005 tout en maintenant la compatibilité ascendante avec les
versions précédentes. En outre, bien que MDAC contienne des composants permettant
d'utiliser OLE DB, ODBC et ADO (ActiveX Data Objects), SQL Native Client implémente
seulement OLE DB et ODBC.
Pour plus d'informations sur la différence entre SQL Native Client et MDAC, consultez la
section Mise à jour d'une application vers SSQL Native Client à partir de MDAC dans la
documentation en ligne de SQL Server 2005.
Pour tirer parti des nouvelles fonctionnalités introduites dans SQL Server 2005, les
applications existantes qui utilisent les objets ADO (ActiveX Data Objects) doivent utiliser le
fournisseur OLE DB de SQL Native Client comme fournisseur d'accès aux données.
Configurations de serveur et client Unicode et non Unicode
Cette section examine les problèmes à prendre en considération lorsque vous utilisez des
systèmes hérités qui ne sont pas entièrement compatibles avec Unicode.
Serveur Unicode et client Unicode
Il s'agit de la configuration idéale. En gardant les données en Unicode durant tout le
processus, vous pouvez garantir les meilleures performances et protéger également les
données récupérées de l'altération. C'est le cas avec ADO et OLE DB ou avec SQL Server
Native Client.
Serveur Unicode et un ou plusieurs clients non Unicode
Dans ce type de configuration, vous n'aurez probablement aucun problème à stocker les
données, mais il y existe une restriction sérieuse lorsqu'il s'agit d'afficher les données sur le
client et de les utiliser. À un moment donné, la page de code client doit être utilisée pour
convertir les données Unicode.
Par exemple, une connexion à une base de données SQL Server 2005 à partir d'un ordinateur
utilisant DB-Library correspond à ce scénario. DB-Library est une interface qui autorise les
applications C à accéder à SQL Server. DB-Library n'a pas été considérablement mis à niveau
depuis SQL Server 6.5. Il est donc soumis aux mêmes restrictions que SQL Server 6.5 : Les
données peuvent uniquement être basées sur une page de code, la page de code de l'OEM par
défaut du système. Vous pouvez également choisir si les informations sur les paramètres
régionaux seront basées sur les paramètres du système client ou pas.
SQL Server Client Network Utility fournit deux options non-exclusives sur la manière dont
DB-Library convertit les informations : conversion ANSI à OEM automatique et utilisation de
paramètres internationaux. Ces deux options sont sélectionnées par défaut.
Comme il n'est pas possible de gérer les données d'autres pages de code, DB-Library doit
uniquement être utilisé avec les systèmes hérités qui manipulent un sous-ensemble de données
à partir de SQL Server. Cette technologie est uniquement fournie pour la compatibilité
ascendante, mais demeure une possibilité pour la prise en charge de données multilingues
dans les applications héritées.
D'autres clients non compatibles Unicode incluent les versions précédentes de Microsoft
Office. Si vous vous connectez à une base de données SQL Server en utilisant une ancienne
version d'Office Access, les caractères Unicode peuvent être convertis en points
d'interrogation, comme sur la figure 9.
Figure 9. Noms de table japonais, affichés sous forme de points d'interrogation.
Ceci est dû au fait que le comportement par défaut dans ODBC 3.7 consistait à effectuer
automatiquement la conversion vers la page de code système. Cependant, comme les
caractères japonais n'ont pas été inclus dans la page de code de l'ordinateur client anglaisÉtats-Unis (1252), ils sont remplacés par des points d'interrogation.
Qui plus est, il n'est pas possible de se connecter à ces tables. Toute tentative de connexion
renverra un message d'erreur. Jet et ODBC essaient de se connecter à une table nommée
dbo.????, ce qui échouera car aucune table de ce nom n'existe. Cette erreur se produira avec
toutes les données ne figurant pas dans la page de code du système client.
Une fois les données converties dans la mauvaise page de code et remplacées par des points
d'interrogation, il n'est plus possible de les reconvertir vers leur valeur d'origine. Par exemple,
si vous utilisez un client non-Unicode pour la connexion à une table contenant des données
coréennes en caractères Unicode, des points d'interrogation remplacent les caractères de texte
coréens, comme illustré à la figure 10.
Figure 10. Exemple de caractères ne pouvant pas être affichés dans une base de données
cliente non-Unicode.
Les trois clients hérités (DB-Library, ODBC et Jet 3.5) ont en commun l'incapacité à prendre
en charge les caractères Unicode, sauf si ces caractères peuvent être convertis vers la page de
code système par défaut. Évitez d'utiliser ces composants pour le développement de clients,
sauf si vous savez que les données peuvent être incluses dans la page de code système par
défaut. Pour plus d'informations, consultez la section Gestion de la conversion des données
entre un serveur Unicode et un client non Unicode dans la documentation SQL Server 2005
en ligne.
En outre, puisque COM fournit des points d'entrée pour l'accès aux données SQL Server dans
Office Access, les paramètres régionaux du client sont utilisés pour interpréter la signification
des données. Ceci peut affecter l'entrée des valeurs de date/heure, de nombres et de devises.
Pour plus d'informations sur ce problème, consultez la section « Gestion des problèmes de
paramètres régionaux » plus loin dans ce document.
Si vous utilisez une interface frontale Office Access pour l'accès à SQL Server, nous vous
recommandons d'effectuer la mise à jour de celle-ci pour profiter des nouvelles
fonctionnalités et de la prise en charge d'Unicode de Microsoft Office 2003 Access ou de
Microsoft Office System 2007 Access. L'aide en ligne d'Office Access fournit des conseils
pour la mise à niveau des applications Office existantes. Notez que le format ADP a été
abandonné après Microsoft Office Access 2000.
Pour plus d'informations sur l'optimisation de votre application Office Access pour
l'amélioration de ses performances et de ses capacités à être mise à jour, consultez le livre
blanc Optimisation des applications Microsoft Office Access liées à SQL Server dans MSDN
Library.
Serveur non Unicode et client Unicode
Il s'agit d'une configuration défavorable pour les données multilingues, car vous ne pourrez
pas enregistrer de données sur le serveur. Dans la mesure où SQL Server 2000 et
SQL Server 2005 sont compatibles Unicode, il est peu probable que vous rencontrerez cette
configuration, à moins qu'un serveur lié à une base de données SQL Server 6.5 soit défini.
Vous pourrez recevoir des données valides de l'instance de SQL Server 6.5, mais ne pourrez
pas insérer de données qui ne sont pas incluses dans la page de code par défaut du serveur.
Conversion de données multilingues des versions précédentes de SQL Server
Certaines applications héritées, qui peuvent avoir été créées avant que la prise en charge
complète d'Unicode ait été implémentée dans SQL Server, utilisent des schémas de codage
personnalisés pour la gestion des données multilingues. Pour préserver les données, vous
pouvez utiliser le programme de copie en bloc ('utilitaire bcp) pour enregistrer les données
sous forme binaire et empêcher ainsi toute erreur de conversion. Ensuite, utilisez l'utilitaire
pour réimporter les données à l'aide de la page de code appropriée avec le paramètre de ligne
de commande -C. Pour plus d'informations sur l'utilitaire bcp, consultez la section Utilisation
d'utilitaires de ligne de commande avec les données multilingues de ce document.
Données multilingues dans l'interface utilisateur
Les outils d'administration et de gestion de SQL Server ont été mis à jour pour améliorer la
prise en charge des données multilingues. Cette section décrit certaines modifications que
vous constaterez dans SQL Server 2005.
Modification générales de l'interface utilisateur
La nouvelle interface de SQL Server Management Studio offre la flexibilité nécessaire pour
l'hébergement d'une variété d'éditeurs de texte et de requêtes, de boîtes de dialogue
d'administration, d'Assistants, de concepteurs et d'explorateurs dans un shell commun. Au
sein de ce shell, vous pouvez spécifier la langue de session et contrôler l'affichage des
éléments suivants :





la langue qui sera utilisée pour les messages d'erreur et autres messages système ;
le format des données de date et d'heure ;
les noms des jours et des mois, y compris leurs abréviations ;
le premier jour de la semaine ;
les symboles et les formats des devises.
Pour modifier la police utilisée dans SQL Server Management Studio, dans le menu Outils,
sélectionnez Options, pointez sur Environnement et sélectionnez ensuite la page Polices et
couleurs pour personnaliser les paramètres de style, taille et couleur d'affichage des fenêtres
d'outils individuelles qui ont des volets d'affichage dans SQL Server Management Studio. Si
vous modifiez le texte, les modifications ne prennent pas effet pendant la session durant
laquelle vous les effectuez. Cependant, vous pouvez évaluer les effets de la modification en
ouvrant une autre instance de SQL Server Management Studio.
34 langues sont disponibles dans les paramètres de session. Pour obtenir la liste des langues,
consultez sys.syslanguages (Transact-SQL) dans la documentation en ligne de
SQL Server 2005.
Vous pouvez également modifier les options de texte et d'affichage pour l'utilisation des
objets multidimensionnels et de data-mining des packages Integration Services ou d'Analysis
Services à l'aide de Business Intelligence Development Studio. Utilisez les pages
Environnement de la boîte de dialogue Options pour configurer des options comprenant la
langue utilisée dans l'environnement pour l'interface utilisateur et l'aide en ligne, les polices et
la configuration du clavier. Après avoir configuré l'environnement de développement à votre
gré, vos configurations sont enregistrées dans un fichier *.suo réutilisable dans le dossier de la
solution.
Remarque : Pour afficher des caractères supplémentaires, vous devez installer une police
qui prend en charge les extensions correspondant à ces caractères. Pour plus d'informations,
consultez l'article Caractères supplémentaires et de substitution dans la bibliothèque MSDN.
Pour afficher la liste des langues disponibles pour l'indexation de texte intégral et les
opérations de requêtes, utilisez sys.fulltext_languages. Cette vue de catalogue contient une
ligne par langue. Chaque ligne fournit une représentation sans ambiguïté des ressources
linguistiques de texte intégral qui sont enregistrées avec Microsoft SQL Server. Le nom ou le
LCID peuvent être spécifiés dans les requêtes de texte intégral et dans le langage de définition
des données d'index de texte intégral.





Pour définir la langue de session côté serveur, utilisez SET LANGUAGE.
La langue de session peut également être définie côté client en utilisant OLE DB,
ODBC ou ADO.NET.
Pour OLE DB, utilisez la propriété SSPROP_INIT_CURRENTLANGUAGE.
Pour ODBC, utiliser le mot-clé LANGUAGE. Pour plus d'informations, consultez
l'article SQLConfigDataSource dans la bibliothèque MSDN.
Pour ADO.NET, utilisez le paramètre Current Language de l'objet
ConnectionString.
Prise en charge des scripts complexes
SQL Server 2005 prend en charge l'entrée, le stockage, la modification et l'affichage de scripts
complexes dans l'intégralité du moteur et des outils de la base de données. Les scripts
complexes incluent les scripts bidirectionnels, tels que l'arabe, les scripts dont les caractères
changent de forme en fonction de leur position, tels que l'indien et le thaï, et les langues qui
nécessitent des dictionnaires internes pour reconnaître des mots car ceux-ci ne disposent
d'aucun séparateur, tels que le thaï.
Les applications de base de données qui interagissent avec SQL Server doivent utiliser des
contrôles qui prennent en charge les scripts complexes. Les contrôles standard de Windows
Forms qui sont créés dans le code géré sont compatibles avec les scripts complexes.
Cependant, les fichiers requis pour la prise en charge des scripts complexes doivent être
installés sur votre ordinateur via les Options régionales et linguistiques. Pour plus
d'informations, consultez la section Prise en charge des scripts complexes dans la
documentation en ligne de SQL Server 2005.
Mise en forme dans le Concepteur de requêtes
Dans le Concepteur de requêtes, vous pouvez pour l'essentiel entrer des informations dans le
volet Grille correspondant aux paramètres régionaux par défaut de l'ordinateur ou utiliser
explicitement la fonction CONVERT pour forcer le traitement d'une chaîne d'un format
spécifique.
L'utilisation des paramètres régionaux fait l'objet de certaines restrictions à prendre en
compte :



Les formats de données longs ne sont pas pris en charge.
Les symboles de devises ne doivent pas être entrés dans le volet Grille, bien que le
symbole du dollar ($) puisse éventuellement être utilisé. Quel que soit votre choix, le
symbole de devise récupéré à partir des paramètres régionaux sera utilisé dans le volet
Résultats.
Le signe moins des nombres négatifs sera toujours situé à gauche, sans parenthèses,
quels que soient les paramètres régionaux. Ainsi, -1 devra être représenté par -1 et non
1-, (1) ou toute autre variante valide pouvant avoir été spécifiée dans la boîte de
dialogue Options régionales.
Ces restrictions sont nécessaires pour permettre un certain taux de prise en charge globale
dans le Concepteur de requêtes, mais ne bloqueront pas la plupart des efforts d'utilisation de
données spécifiques à des paramètres régionaux.
Dans la mesure où toutes les informations entrées dans le volet Grille seront traduites dans un
format indépendant des paramètres régionaux dans le volet SQL, sur un ordinateur allemand
Standard, « 03.09.65 » sera traduit par { ts ' 1965-09-03 00:00:00 }. Toutes les données
entrées directement dans le volet SQL doivent avoir ce format ou, si ce n'est pas le cas,
inclure un appel explicite à CONVERT.
Ordre de tri
Le tri des données affichées dans le volet Résultats n'est pas influencé par les paramètres
régionaux. Ce sont les règles de classement qui régissent l'interprétation de l'instruction
ORDER BY.
Transact-SQL multilingue
Lorsque vous envoyez une instruction SQL contenant des données multilingues au serveur,
deux problèmes affectent l'acheminement correct des données vers le serveur : (1) le codage
de l'instruction SQL et (2) le codage des littéraux de chaîne de l'instruction.
Codage des instructions SQL
Il existe des restrictions s'appliquant aux caractères pouvant être utilisés dans les instructions
Transact-SQL. Vous pouvez entrer des caractères DBCS pour les littéraux et les noms d'objets
de base de données, les alias, les noms de paramètres et les indicateurs de paramètres.
Cependant, vous ne pouvez pas utiliser de caractères DBCS pour les éléments du langage
SQL tels que les noms de fonction ou les mots-clés. Ainsi, lorsque vous tapez des mots-clés
SQL tels que SELECT, vous devez utiliser les caractères demi-chasse « SELECT » au lieu
des caractères japonais pleine chasse « ‚r‚d‚k‚d‚b‚s ».
Si la chaîne SQL utilise Unicode (comme par exemple toute chaîne SQL utilisant ADO), vous
pouvez coder tout type de caractère. Si la chaîne n'utilise pas Unicode (comme par exemple,
une chaîne d'un fichier de commandes ou .sql non Unicode), la conversion doit être effectuée
à un moment ou un autre. Lorsque vous effectuez cette conversion, vous devez planifier
soigneusement cette tâche et prendre en compte la page de code système par défaut de
l'ordinateur sur lequel la conversion est effectuée, pour empêcher tout problème dans les
applications multilingues.
Codage de littéraux de chaîne dans les instructions SQL
Les constantes de chaîne Unicode qui apparaissent dans du code exécuté sur le serveur, telles
que les procédures stockées et les déclencheurs, doivent être précédées de la majuscule N. Si
un littéral de chaîne n'est pas de type Unicode (marqué du préfixe N), la chaîne est convertie
dans la page de code par défaut de la base de données, qui peut ne pas reconnaître certains
caractères. Avec les données multilingues, il est préférable d'utiliser un type de données
Unicode et des littéraux de chaîne Unicode.
L'exemple suivant correspond à une chaîne Unicode conçue en plaçant un préfixe « n »
devant la chaîne :
SELECT n'??????'
La figure 11 illustre comment cette chaîne, qui est le nom de la langue hindi en hindi,
apparaîtrait sur un ordinateur sur laquelle la police hindi correcte est installée.
Figure 11. Exemple de caractères hindi sur un client hindi
Si le préfixe « n » n'avait pas été placé devant la chaîne, elle aurait été convertie en ??????.
Ceci se produit également avec les données qui ont une page de code qui ne correspond aux
valeurs par défaut du système.
Avertissement : Rappelez-vous que l'utilisation du préfixe « n » dans les littéraux de chaîne
comme les types de données (nchar, nvarchar et ntext) pour la représentation des données
Unicode est spécifique à SQL Server. La spécification SQL ANSI-92 définit les types de
données de caractère nationaux mais ne les spécifie pas comme devant être de type Unicode.
La spécification SQL ANSI-99 aborde l'utilisation d'un ensemble de types Unicode avec un
préfixe « u » (par exemple, utext, uchar et uvarchar). Ces types de données ne sont pas
disponibles dans SQL Server.
Utilisez le préfixe N devant les chaînes pour vous assurer qu'elles sont transmises en tant que
chaînes Unicode. Ceci permet d'éviter des problèmes de conversion inopinés lors de
l'utilisation de la page de code système par défaut du serveur.
Si votre application n'envoie pas de données Unicode au serveur SQL Server et que la page de
code ANSI du client correspond à la page de code du serveur SQL Server, il n'est pas
nécessaire de préfixer les constantes de chaîne avec N. Vous n'encourrez aucune perte de
données résultant de l'omission du préfixe.
Si vous utilisez un serveur lié à SQL Server 7.0, des éléments supplémentaires doivent être
pris en compte. SQL Server 7.0 vous permet de sélectionner pendant l'installation un
classement Unicode qui est indépendant de l'ordre de tri, ce qui peut dans certains cas
entraîner des résultats différents entre les opérations concernant des chaînes préfixées avec N
et celles qui n'utilisent aucun préfixe. Pour plus d'informations sur ce problème, consultez le
site Assistance et support produit de Microsoft.
Fonctions de traitement des chaînes
Transact-SQL dispose de fonctions de traitement prédéfinies dont les implications
multilingues doivent être prises en compte :
ASCII
Renvoie le point de code du premier caractère d'une chaîne utilisant la page de code système
par défaut actuelle. Si le caractère ne figure pas dans cette page de code, la valeur 63 est
renvoyée (point de code correspondant à un point d'interrogation). Cette fonction est
semblable à la fonction Asc() de Visual Basic et VBScript.
CHAR
Renvoie un caractère, en fonction du point de code ANSI donné. C'est en gros l'opération
inverse de la fonction ASCII. Elle est semblable à la fonction Chr() de Visual Basic et
VBScript. Si le point de code ne se situe pas dans la plage 0–255, la valeur renvoyée est Null.
NCHAR
Renvoie un caractère en fonction de son point de code Unicode. NCHAR est l'équivalent
Unicode de la fonction CHAR. Celle-ci est semblable à la fonction ChrW() de Visual Basic
et VBScript.
UNICODE
Renvoie le point de code du premier caractère d'une chaîne. UNICODE est l'équivalent
Unicode de la fonction ASCII. Cette fonction est semblable à la fonction AscW() de
Visual Basic et VBScript.
Vous trouverez un exemple de la fonction NCHAR plus haut dans ce document (voir la
section « Types de date/heure : datetime, smalldatetime »), dans lequel elle a été utilisée pour
ajouter la marque RLM (marque de droite à gauche) devant une date hijri. L'ajout de la
marque RLM permet de s'assurer que la date est mise en forme de la manière prévue.
Prise en charge des paramètres régionaux dans
SQL Server 2005
SQL Server 2000 inclut la prise en charge spécifique des paramètres régionaux de 33 langues
différentes. Dans SQL Server 2005, la prise en charge de toutes les langues prises en charge
par le système d'exploitation Microsoft Windows a été ajoutée. L'annexe B contient une liste
de toutes les langues prises en charge, avec leur identificateur de paramètres régionaux.
Vous pouvez obtenir la liste de ces langues et des informations sur celles-ci en utilisant la
procédure stockée sp_helplanguage. Notez que bien que chaque version de SQL Server
stocke les informations complètes concernant de nombreux éléments ci-dessous, vous
n'obtiendrez pas les messages système traduits pour tous les paramètres régionaux, à moins
d'installer une version localisée du produit.
Les informations sur les langues sont enregistrées dans la table syslanguages, à l'exception
des messages, qui sont enregistrés dans sysmessages.
Paramètres de langue
Chaque instance de SQL Server doit avoir une langue par défaut qu'elle utilise pour gérer les
éléments tels que les formats de date et les messages. Ces informations sont enregistrées pour
chaque connexion au serveur qui est créée. Bien que la définition d'une langue par défaut pour
le serveur soit effectuée initialement pendant l'installation, elle peut être remplacée au niveau
du serveur dans l'onglet Avancé de la boîte de dialogue Propriétés de SQL Server, comme
indiqué sur la figure 12. Dans SQL Server 2000, cette option se situe dans l'onglet
Paramètres du serveur).
Figure 12. Définition de la langue par défaut pour le serveur (cliquez sur l'image pour
l'agrandir)
Vous pouvez également utiliser la procédure stockée sp_configure pour modifier la langue
par défaut. Par exemple, l'instruction suivante change la langue en italien :
sp_configure "language", 6
Le paramètre de langue par défaut peut être remplacé à chaque connexion grâce à la
procédure stockée sp_addlogin ou en utilisant la boîte de dialogue Propriétés de la
connexion illustrée à la figure 13.
Figure 13. Définition de la langue par défaut pour une connexion (cliquez sur l'image
pour l'agrandir)
La langue par défaut peut être remplacée au niveau de la session en utilisant l'instruction SET
LANGUAGE, comme dans les exemples suivants :
SET
SET
SET
SET
LANGUAGE
LANGUAGE
LANGUAGE
LANGUAGE
French
èeština
Çѱ¹¾î
N'“ú–{Œê'
Manipulation de chaînes
Des méthodes individuelles d'accès aux données fournissent leurs propres méthodes pour la
spécification d'une langue hors d'un appel à SET LANGUAGE.


ADO prend en charge un mot-clé de langue spécifique au fournisseur dans
ConnectionString.
OLE DB peut définir la propriété SSPROP_INIT_CURRENTLANGUAGE,
spécifique à un fournisseur.


ODBC peut spécifier une langue dans la définition de la source de données ou dans le
mot-clé LANGUAGE de la chaîne de connexion.
DB-Library peut utiliser dblogin pour allouer un LOGINREC, suivi de
DBSETNATLANG pour spécifier un paramètre de langue.
Les paramètres de langue (qu'ils soient spécifiés au niveau du serveur, de la connexion ou de
la session) affectent les éléments suivants :





Messages
Date et heure
le premier jour de la semaine ;
l'unité et le symbole des devises ;
les noms des mois/jours et les noms abrégés des mois.
Messages
SQL Server 2000 et SQL Server 2005 prennent en charge l'utilisation de plusieurs copies
spécifiques à chaque langue des chaînes et des messages d'erreur système. Ces messages sont
enregistrés dans la table sysmessages de la base de données Master. Lorsque vous installez
une version localisée de SQL Server, ces messages système sont traduits pour la version dans
cette langue. Par défaut, cet ensemble de messages est également disponible en anglais (ÉtatsUnis). Utilisez Set Language pour spécifier la langue de la session de serveur. Par défaut, les
messages sont envoyés dans la langue de la version installée.
Lorsque SQL Server envoie un message à une connexion, il utilise le message localisé si
l'identificateur de langue correspond à l'un des identificateurs de langue de la colonne
msglangid de la table sysmessages. Ces identificateurs ont un format décimal et représentent
le code de paramètres régionaux (LCID) du message. S'il n'y a pas de message avec le même
LCID dans la table sysmessages, les messages anglais (États-Unis) sont envoyés.
Vous pouvez ajouter un message défini par l'utilisateur dans une langue spécifique à la table
sysmessages en utilisant le paramètre @lang de la procédure stockée système
sp_addmessage. Le numéro d'erreur doit être supérieur à 50 000 et vous devez spécifier pour
le message le paramètre @lang en tant que langue ou un alias nommé mappant le LCID.
Puisque plusieurs chaînes et messages d'erreur système spécifiques à des langues peuvent être
installés sur le serveur, la valeur langue indique la langue dans laquelle les messages doivent
être écrits dans la table sysmessages. Lorsque langue n'est pas spécifié, la langue est par
défaut celle de la session de serveur. Les définitions de langue prises en charge sont stockées
dans master.dbo.syslanguages.
Si vous devez installer des versions dans plusieurs langues de sysmessages, consultez le site
Assistance et support technique de Microsoft pour les étapes et exigences supplémentaires.
Les installations de versions de langues différentes d'instances de SQL Server sur un même
ordinateur ne sont pas prises en charge. Par exemple, SQL Server 2005 version allemande et
SQL Server 2005 version portugaise (Brésil) ne sont pas pris en charge en tant qu'instances
multiples sur un même ordinateur.
Remarque : De nombreuses tables système des versions précédentes de SQL Server sont
implémentées sous la forme d'un ensemble de vues dans SQL Server 2005. Ces vues portent
le nom de vues de compatibilité et ont pour seul but la compatibilité ascendante. Les vues de
compatibilité exposent les mêmes métadonnées que celles qui étaient disponibles dans
SQL Server 2000. Cependant, elles n'exposent aucune des métadonnées apparentées aux
fonctionnalités introduites dans SQL Server 2005.
Date et heure
Chaque langue possède une valeur par défaut pour le format de date court : mja, jma ou amj.
Vous pouvez remplacer ceci au niveau de la connexion en utilisant le paramètre SET
DATEFORMAT. Pour récupérer la date courte par défaut, utilisez la procédure stockée
sp_helplanguage. La valeur est stockée dans la colonne dateformat.
Premier jour de la semaine
Le premier jour de la semaine varie selon les paramètres régionaux. Dans les 33 langues de la
table syslanguages, il varie entre 1 (lundi) et 7 (dimanche). Ces informations peuvent être
obtenues en utilisant la procédure stockée sp_helplanguage. La valeur est stockée dans la
colonne datefirst.
Unités et symboles des devises
Toute colonne de type money ou smallmoney peut inclure un symbole de devise. Le symbole
ne doit pas obligatoirement être l'un des symboles spécifiés dans la boîte de dialogue Options
régionales et peut être l'un des caractères indiqués dans le tableau suivant.
Symbole de devise
$
£
¤
¥
?
?
ß
?
?
?
£
?
P
?
?
¤
þ
€
Nom de la devise
Valeur Unicode (hexadécimale)
Symbole du dollar (États-Unis) 0024
Symbole de la livre (R.-U.)
00A3
Symbole de devise (Universel) 00A4
Symbole du yen
00A5
Signe de la roupie bengalie
09F2
Symbole de la roupie bengalie 09F3
Symbole du baht thaïlandais 03EF
Symbole du colon
20A1
Symbole du cruzeiro
20A2
Symbole du franc français
20A3
Symbole de la lire
20A4
Symbole du naira
20A6
Symbole de la peseta
20A7
Symbole de la roupie
20A8
Symbole du won
20A9
Symbol du nouveau shekel
20AA
Symbole du dông
20AB
Symbole de l'euro
20AC
Notez que le symbole de l'Euro (valeur hexadécimale 20AC) n'est pas identique à ?, le
symbole de l'ÉCU (valeur hexadécimale 20A0). Si vous tentez d'utiliser ? dans une valeur de
devise, une erreur surviendra.
Noms des mois/jours et noms abrégés des mois
Les noms des mois et des jours se trouvent dans la table syslanguages. Vous pouvez les
récupérer en utilisant la procédure stockée sp_helplanguage, et afficher les colonnes
suivantes :
months
Liste délimitée par des virgules des noms des mois, de janvier à décembre.
shortmonths
Liste délimitée par des virgules des noms abrégés des mois, de janvier à décembre.
days
Liste délimitée par des virgules des jours de la semaine, du lundi au dimanche
Gestion des problèmes de paramètres régionaux avec COM
Bien que SQL Server dispose de fonctionnalités très puissantes en termes de traitement des
valeurs de date/heure et devise, si vous utilisez un service COM tel que ADO pour l'accès
serveur, vous devez tenir compte du fonctionnement de ce service.
Vous pourriez par exemple rencontrer des problèmes si vous souhaitez que Visual Basic
reconnaisse une valeur numérique précédée de l'un des symboles de devise répertoriés dans le
tableau ci-dessus comme étant une valeur de devise. Vous pourriez également rencontrer des
problèmes d'utilisation appropriée par COM des valeurs de date/heure stockées dans les
chaînes.
Pour remédier convenablement à ces problèmes, vous devez comprendre dans le détail ce qui
se passe lorsque votre application convertit une chaîne en une valeur de date/heure ou devise.
Tout d'abord, déterminez si la conversion survient sur le client ou sur le serveur, pour décider
ensuite des règles qui s'appliquent.
Office Access 2000 ADP est un exemple de client qui convertit la date, l'heure ou les valeurs
de devise. Dans la mesure où Access fonctionne avec OLE DB, toutes les opérations d'Office
Access 2000 sont régies par les règles COM qui utilisent les paramètres régionaux de
l'ordinateur client.
Les fournisseurs OLE DB tels que le fournisseur Microsoft OLE DB pour SQL Server
convertiront convenablement une date COM valide en une date SQL Server. Il est
souhaitable, dans la mesure du possible, de ne pas recourir aux formats de date stockés dans
des chaînes. Ce type de fonctionnalité peut ne plus fonctionner si les paramètres régionaux du
client changent.
SQL Server 2005 Integration Services
SQL Server 2005 Integration Services remplace les services Data Transformation Services de
SQL Server 2000. Integration Services offrent des fonctionnalités largement améliorées
d'importation, d'exportation et de transformation de données multilingues. Integration
Services prend en charge l'analyse et la manipulation des données multilingues et tous les
paramètres régionaux de Windows, et fournissent des options de comparaison spécialisées
pour le tri et la comparaison des données de chaîne.
Paramètres régionaux dans les packages Integration Services
Integration Services prend en charge les paramètres régionaux au niveau de la tâche, du
conteneur, de l'objet de package et du composant de flux de données. Vous pouvez également
définir les paramètres régionaux des gestionnaires d'événements et de certaines sources et
destinations.
Un package peut utiliser plusieurs paramètres régionaux différents. Par exemple, le package
peut utiliser les paramètres régionaux de l'anglais (États-Unis) tandis qu'une tâche du package
utilise les paramètres régionaux de l'allemand (Allemagne) et une autre tâche utilise les
paramètres régionaux du japonais (Japon).
Vous pouvez utiliser tous les paramètres régionaux Windows dans un package Integration
Services. Les paramètres régionaux sont définis lors de la création du package. Sauf en cas
d'utilisation par le package de configurations spécifiques pour la mise à jour des propriétés
des paramètres régionaux, le comportement du package est assuré d'être identique lors du
déploiement sur des ordinateurs utilisant des options régionales et de langue différentes de
celles de l'environnement de développement.
Définition des paramètres régionaux
Integration Services n'utilise pas la page de code pour déduire des règles spécifiques aux
paramètres régionaux pour le tri des données ou l'interprétation des données de date, d'heure
ou décimales. La transformation lit plutôt les paramètres régionaux définis par la propriété
LocaleID sur le composant de flux de données, la tâche de flux de données, le conteneur ou le
package.
Par défaut, les paramètres régionaux d'une transformation sont hérités de sa tâche de flux de
données, qui hérite elle-même ceux-ci du package. Si la tâche de flux de données se trouve
dans un conteneur tel que le conteneur de boucle For, elle hérite ses paramètres régionaux du
conteneur.
Vous pouvez également spécifier des paramètres régionaux pour un gestionnaire de
connexions de fichiers plats ou de fichiers plats multiples.
Vous pouvez modifier les paramètres régionaux ou la page de code d'un objet en utilisant
l'éditeur de l'objet de flux de données ou de flux de contrôle. Pour l'objet de package, vous
devez définir des propriétés telles que LocaleID dans la fenêtre Propriétés.
Figure 14. Spécification des paramètres régionaux d'un package
Notez que la propriété CodePage n'est pas disponible pour l'objet de package. Cela est dû au
fait que la page de code ne s'applique pas à l'objet de package, mais uniquement aux sources,
aux destinations ou aux transformations.
Utilisation des données de fichiers plats
Lors de l'utilisation de données sources d'un fichier plat, il est important de comprendre
comment le gestionnaire de connexions de fichiers plats interprète les données de fichier plat.
Si la source de fichier plat est de type Unicode, le gestionnaire de connexions de fichiers plats
définit toutes les colonnes comme [DT_WSTR] avec une largeur de colonne par défaut de 50.
Si la source du fichier plat est codée avec le codage ANSI, les colonnes sont définies comme
[DT_STR] avec une largeur de colonne de 50. Vous devrez probablement modifier ces
valeurs par défaut pour rendre les types de colonnes de chaînes plus adaptés à vos données.
Pour ce faire, examinez le type de données de la destination dans laquelle les données seront
écrites. Ensuite, choisissez le type correct dans le gestionnaire de connexions de fichiers plats.
Sachez qu'en important des données à partir de fichiers plats ou en exportant des données vers
ceux-ci, certaines propriétés du package, de la connexion et des tâches de transformation de
données sont définies automatiquement en fonction des paramètres régionaux. Vous pouvez
facilement remplacer ces paramètres, ce qui peut être nécessaire si vos données contiennent
des informations qui pourraient être affectées par les paramètres régionaux. L'absence de
modification des paramètres régionaux du fichier plat source ou de destination peut avoir des
effets inattendus.
Par exemple, le didacticiel d'Integration Services livré avec SQL Server 2005 contient un
scénario d'importation de données à partir d'un fichier plat. Le fichier contient une colonne
BirthDate qui utilise l'un des formats de date par défaut pour les paramètres régionaux
Anglais (États-Unis). Si vous exécutez ce didacticiel sur un ordinateur qui utilise des
paramètres régionaux différents, le package qui importe les données peut ne pas s'exécuter car
il ne peut pas analyser les données de date. Dans ce cas, pour faire fonctionner le package, il
suffit de modifier le package, les objets de flux de données et les sources ou destinations
apparentées, pour vous assurer qu'ils utilisent les paramètres régionaux corrects.
Figure 15. Définition des paramètres régionaux et de la page de code par défaut pour un
fichier plat (cliquez sur l'image pour l'agrandir)
Analyse des données de texte
Lorsque les services Intégration Services chargent du texte à partir d'un fichier plat ou d'une
autre source, ils analysent le texte conformément à un ensemble de routines d'analyse
prédéfinies : l'analyse rapide ou l'analyse standard.
L'analyse rapide se compose d'un ensemble de routines rapides et simples ne prenant pas en
charge les conversions de type de données spécifiques à des paramètres régionaux et prenant
uniquement en charge les formats de date et d'heure les plus fréquemment utilisés. L'analyse
rapide n'effectue pas d'analyse spécifique aux paramètres régionaux, ne reconnaît pas les
caractères spéciaux des données de devises et ne peut pas convertir la représentation
hexadécimale ou scientifique des entiers.
L'analyse standard est un ensemble riche de routines d'analyse qui prend en charge toutes les
conversions de type de données qui sont fournies par les API d'automatisation de conversion
de type de données disponibles dans Oleaut32.dll et Ole2dsip.dll.
Lorsque vous créez un flux de données, vous pouvez spécifier si les colonnes de résultat de la
transformation utilisent des routines rapides indépendantes des paramètres régionaux fournies
par Microsoft SQL Server 2005 Integration Services (SSIS) ou des routines d'analyse standard
tenant compte des paramètres régionaux.
Si le flux de données du package nécessite une analyse dépendant des paramètres régionaux,
l'analyse standard est recommandée à la place de l'analyse rapide. Par exemple, l'analyse
rapide ne reconnaît pas les données dépendantes des paramètres régionaux incluant des
symboles décimaux tels que la virgule, les formats de date différents d'année-mois-jour et les
symboles de devises.
Pour plus d'informations sur les différents formats de données pris en charge par l'analyse
rapide et l'analyse standard, consultez la section Analyse des données dans la documentation
en ligne de SQL Server 2005.
Analyse rapide spécifiée au niveau de la colonne. Dans la source Flat File et la transformation
Data Conversion, vous pouvez choisir d'utiliser l'analyse rapide des colonnes de sortie. Les
entrées et les sorties peuvent inclure des colonnes dépendantes ou indépendantes des
paramètres régionaux. Cependant, l'analyse rapide est uniquement disponible avec l'utilisation
de la source Flat File ou de la transformation Data Conversion.
Options de comparaison
Les paramètres régionaux fournissent les règles de base pour la comparaison de données de
chaîne dans un flux de données. Par exemple, les paramètres régionaux spécifient la position
de tri de chaque lettre de l'alphabet. Cependant, ces règles peuvent ne pas être suffisantes pour
les comparaisons que vous voulez effectuer et Integration Services prend en charge une série
d'options de comparaison avancées qui s'étendent au-delà des règles de comparaison des
paramètres régionaux. Par exemple, si vous choisissez d'ignorer les caractères sans
espacement, « a » et « á » sont équivalents en ce qui concerne la comparaison.
Les comparaisons de chaînes constituent un élément important d'un grand nombre des
transformations exécutées par Integration Services et sont également utilisées dans
l'évaluation d'expressions dans les variables et dans les expressions de propriétés. Par
exemple :



La transformation Conditional Split peut utiliser les comparaisons de chaînes dans des
expressions pour déterminer la sortie vers laquelle envoyer une ligne de données.
La transformation Derived Column peut utiliser les comparaisons de chaînes dans des
expressions pour générer de nouvelles valeurs de colonnes.
Les transformations Sort, Aggregate, Fuzzy Grouping et Fuzzy Lookup peuvent être
personnalisées pour modifier la façon dont les chaînes sont comparées au niveau de la
colonne. Vous pourriez par exemple spécifier qu'une recherche néglige la casse, mais
traite les caractères accentués et non accentués comme des caractères différents.
En fonction des données et de la configuration de la transformation, le traitement suivant peut
survenir pendant la comparaison des données de chaîne :



Conversion des données en Unicode. Si les données source ne sont pas déjà Unicode,
les données sont automatiquement converties en Unicode avant que la comparaison ait
lieu.
Utilisation des paramètres régionaux pour appliquer des règles spécifiques à ceux-ci
pour interpréter la date, l'heure, les données décimales et l'ordre de tri.
Application d'options de comparaison au niveau de la colonne pour modifier la
sensibilité des comparaisons.
Modification des options de comparaison
Integration Services prennent en charge un ensemble d'options de comparaison avancées qui
peuvent être définies au niveau de la colonne. Par exemple, l'une des options de comparaison
vous permet d'ignorer les caractères sans espacement. L'effet de cette option consiste à
négliger les signes diacritiques tels que les accents, ce qui rend « a » et « á » identiques en ce
qui concerne la comparaison.
Vous pouvez définir les options de comparaison suivantes dans les transformations Sort,
Aggregate, Fuzzy Grouping et Fuzzy Lookup :






Ignorer la casse
Ignorer les caractères kana
Ignorer la largeur de caractère
Ignorer les caractères sans espacement
Ignorer les symboles
Trier les signes de ponctuation en tant que symboles
Les transformations Fuzzy Grouping et Fuzzy Lookup incluent également l'option
FullySensitive pour la comparaison des données. Cet indicateur de comparaison, uniquement
disponible dans l'éditeur avancé, indique que toutes les options de comparaison doivent
s'appliquer.
Sources et destinations des données
Dans la plupart des cas, Integration Services peut identifier les paramètres régionaux corrects
à partir de la source des données. Si Integration Services fournit une page de code inattendue
ou si le package accède à une source de données en utilisant un fournisseur qui ne fournit pas
d'informations suffisantes pour déterminer la page de code correcte, vous pouvez spécifier
une page de code par défaut dans la source et la destination OLE DB. Les pages de code par
défaut sont utilisées à la place des pages de code fournies par Integration Services.
Les fichiers n'ont pas de pages de code. Au lieu de cela, les gestionnaires de connexion de
fichier plat et de fichiers plats multiples qu'un package utilise pour se connecter aux données
du fichier incluent une propriété pour la spécification de la page de code du fichier. La page
de code peut être définie au niveau du fichier uniquement et non au niveau de chaque colonne.
En fonction des opérations que la transformation exécute et de sa configuration, les données
de chaîne peuvent être converties en type de données DT_WSTR, qui est une représentation
Unicode de caractères de chaîne.
Les données de chaîne de type DT_STR sont converties en Unicode à l'aide de la page de
code de chaque colonne. Integration Services prend en charge les pages de code au niveau de
chaque colonne et chaque colonne peut être convertie en utilisant une page de code différente.
Conversion explicite de données de chaîne en Unicode
Les flux de données des packages extraient et chargent les données. Les flux de données
peuvent accéder aux données dans des magasins de données hétérogènes, qui peuvent utiliser
une variété de types de données personnalisés et standard. Dans un flux de données, les
sources Integration Services effectuent le travail d'extraction des données, d'analyse des
données de chaîne et de conversion des données en un type de données Integration Services.
Les transformations suivantes peuvent analyser des données pour les convertir en type de
données différent ou créer des copies de colonnes avec des types de données différents. Les
expressions utilisées dans les composants peuvent également associer des arguments et des
opérandes à des types de données différents. Enfin, lorsque les données sont chargées dans un
magasin de données, la destination peut analyser les données pour les convertir en un type de
données qu'elle utilise.
Lorsque les données entrent dans un flux de données d'un package, la source qui extrait les
données les convertit en un type de données Integration Services. Les données numériques
reçoivent un type de données numérique, les données de chaîne reçoivent un type de données
de caractère et les dates reçoivent un type de données de date. Les autres données, telles que
les GUID et les BLOBs (objets binaires de grande taille), reçoivent également des types de
données Integration Services appropriés. Si les données sont d'un type de données qui n'est
pas convertible en type Integration Services, une erreur se produit.
Pour plus d'informations sur la conversion de données dans les flux de données, consultez la
section Types de données Integration Services dans la documentation en ligne de
SQL Server 2005.
La transformation Data Conversion vous offre la possibilité de contrôler les conversions : de
changer explicitement de page de code, de changer de format et de convertir les données d'une
colonne d'entrée vers un type de données différent. Vous pouvez appliquer plusieurs
conversions à une colonne d'entrée unique. Les données converties peuvent remplacer les
données originales, mais vous pouvez également les copier vers une nouvelle colonne de
sortie pour les utiliser dans les composants en aval.
Par exemple, un package peut extraire des données de sources multilingues et utiliser ensuite
cette transformation pour convertir les colonnes en type de données requis par le magasin de
données de destination.
Grâce à la transformation Data Conversion, vous pouvez effectuer les types de conversion de
données suivants :

Modifier le type de données.


Définir la longueur de colonne des données de chaîne et la précision et l'échelle des
données numériques.
Spécifier une page de code.
La transformation Character Map est un autre composant utile pour effectuer les conversions
de données de caractère. Elle applique des fonctions de chaîne, telles que la conversion de
minuscules en majuscules, aux données qui sont de type chaîne.
La transformation Character Map peut convertir et remplacer les données des colonnes ou
ajouter une colonne à la sortie de la transformation et placer les données converties dans la
nouvelle colonne. Vous pouvez appliquer des ensembles différents d'opérations de mappage à
une même colonne d'entrée et placer les résultats dans des colonnes différentes. Par exemple,
vous pouvez convertir une même colonne en minuscules comme en majuscules et placer les
résultats dans deux colonnes différentes.
La transformation Character Map prend en charge les opérations de mappage suivantes :
Opération
Inversion d'octets
Pleine chasse
Demi chasse
Hiragana
Katakana
Casse linguistique
Minuscule
Chinois simplifié
Chinois traditionnel
Majuscules
Description
Inverse l'ordre des octets.
Mappe les caractères demi chasse vers des
caractères pleine chasse.
Mappe les caractères pleine chasse vers des
caractères demi chasse.
Mappe les caractères katakana vers des
caractères hiragana.
Mappe les caractères hiragana vers des
caractères katakana.
Applique la casse linguistique au lieu des
règles système. La casse linguistique fait
référence à la fonctionnalité fournie par l'API
Win32 pour le mappage Unicode de casse
simple du turc et d'autres paramètres régionaux.
Convertit les caractères en minuscules.
Mappe les caractères chinois traditionnel vers
des caractères chinois simplifié.
Mappe les caractères chinois simplifié vers des
caractères chinois traditionnel.
Convertit les caractères en majuscules.
Plusieurs opérations peuvent être effectuées dans une transformation. Cependant, certaines
opérations de mappage sont mutuellement exclusives. Dans la plupart des cas, ces exclusivités
sont des exclusivités de bon sens : Vous ne pouvez par exemple par mapper de katakana vers
hiragana tout en mappant de hiragana vers katakana. Pour plus d'informations sur les
mappages exclusifs, consultez la section Transformation Character Map dans la
documentation en ligne de SQL Server 2005.
Remarque : Le mappage peut dans certains cas tronquer les données. Ce problème peut par
exemple survenir lorsque des caractères codés sur un seul octet sont mappés vers des
caractères avec une représentation codée sur plusieurs octets. Lorsque vous effectuez des
conversions de données, utilisez les visionneuses de données pour analyser les
transformations des données et les résultats d'erreur afin de diriger les données tronquées ou
fausses vers une sortie différente. Pour plus d'informations, consultez la section Gestion des
erreurs dans les données dans la documentation en ligne de SQL Server 2005.
Prise en charge des caractères supplémentaires dans SSIS
Integration Services gère les paires de substitution de manière transparente. Par conséquent, à
moins qu'une source de données, une destination de données ou une transformation modifie la
taille d'une chaîne, les caractères de la paire de substitution seront gérés de manière identique
à tous les autres caractères Unicode. Les fonctions ou fonctionnalités qui renvoient la taille
d'une chaîne doivent traiter les caractères des paires de substitution comme deux caractères
Unicode distincts et non définis. Les fonctions assurant cette opération sont les fonctions de
chaîne LEN et SUBSTRING.
Pour afficher des caractères supplémentaires, l'utilisateur doit personnaliser Business
Intelligence Development Studio pour installer une police qui prend en charge les extensions
correspondant à ces caractères. Cependant, comme les caractères supplémentaires sont
uniquement pris en charge par SQL Server en tant que données et non comme métadonnées,
les emplacements dans lesquels vous pourriez avoir besoin d'afficher ces caractères se limitent
aux aperçus de données, à la clause WHERE des requêtes, etc.
Modification dynamique des paramètres régionaux avec les configurations
Si un package doit utiliser des paramètres régionaux différents lorsqu'il est déployé sur des
serveurs différents, vous pouvez créer des configurations qui fournissent les paramètres
régionaux mis à jour à utiliser lors de l'exécution du package.
Les configurations sont des paires « attribut-valeur » qui vous permettent de définir des
propriétés et des variables lors de l'exécution depuis l'extérieur de l'environnement de
développement. En incorporant ces configurations au développement, vous pouvez créer des
packages à la fois souples et faciles à déployer et à distribuer. Integration Services permet les
types de configuration suivants :





fichier de configuration XML ;
variable d'environnement ;
entrée de Registre ;
variable de package parent ;
table SQL Server.
Pour une flexibilité supplémentaire, Integration Services prend en charge l'utilisation de
configurations indirectes. Cela signifie que vous utilisez une variable d'environnement pour
spécifier l'emplacement de la configuration, qui à son tour fait référence à des valeurs.
Un fichier de configuration XML peut inclure des configurations pour plusieurs propriétés et,
sous certaines conditions, contenir les configurations de plusieurs packages.
Plusieurs nouveaux didacticiels Integration Services ont été publiés pour vous guider dans le
processus de création et de test des configurations, ainsi que dans la mise en place d'un
utilitaire de déploiement pour la création de nouveaux packages contenant des configurations
dynamiques. Nous vous recommandons de consulter ces didacticiels pour apprendre comment
mettre à jour les pages de code, les options de conversion ou d'autres paramètres
internationaux de façon dynamique en utilisant des configurations et en déployant ensuite les
packages.
Didacticiel Création d'un package ETL simple
Le didacticiel Création d'un package ETL simple vous guide tout au long des tâches
suivantes.




Création d'un package Integration Services simple et ajout d'une boucle.
Présentation de l'Assistant Package Configuration Wizard et description du format des
configurations XML.
Création d'un package de configuration qui modifie le répertoire contenant les fichiers
texte devant être parcourus en boucle.
Test de la configuration grâce à la modification de la valeur d'une variable depuis
l'extérieur de l'environnement de développement et au pointage de la propriété
modifiée vers un nouveau dossier de données exemplaire. Lors de l'exécution suivante
du package, le fichier de configuration met à jour le dossier des fichiers.
Didacticiel Déploiement des packages
Vous trouverez le didacticiel Déploiement des packages utile pour l'apprentissage des tâches
suivantes.




Utilisation d'une combinaison de fichiers de configuration XML et de configurations
indirectes pour la mise à jour des chaînes de connexion de fichiers journaux, les
fichiers texte et les emplacements des fichiers XML et XSD que le package utilise au
moment de l'exécution.
Création d'un lot de déploiement à utiliser pour l'installation des packages. Le paquet
de déploiement se compose des fichiers de package et des autres éléments que vous
avez ajoutés au projet Integration Services, des dépendances de package incluses
automatiquement par Integration Services et de l'utilitaire de déploiement que vous
avez généré.
Exécution de l'Assistant Package Installation Wizard pour l'installation des packages
et des dépendances des packages. Les packages sont installés dans la base de données
SQL Server msdb et les fichiers de prise en charge sont installés dans le système de
fichiers.
Mise à jour de la configuration pour utiliser de nouvelles valeurs qui permettent aux
packages de s'exécuter avec succès dans le nouvel environnement.
Utilisation d'utilitaires de ligne de commande avec les
données multilingues
Cette section fournit des informations de base sur certains utilitaires de ligne de commande
fournis avec SQL Server 2005. L'utilitaire bcp a été mis à jour pour fournir des
fonctionnalités utiles dans les scénarios multilingues et inclut la prise en charge des formats
XML. Sqlcmd est un nouvel utilitaire qui simplifie l'écriture de scripts et vous permet de
contrôler la page de code des fichiers de scripts.
bcp
Lorsque vous souhaitez importer ou exporter des données dans une page de code particulière,
vous pouvez utiliser l'utilitaire bcp. L'utilitaire bcp copie les données entre une instance de
Microsoft SQL Server et un fichier de données dans un format spécifié par l'utilisateur.
Dans SQL Server 2005, bcp applique de nouvelles validations et vérifications de données qui
risquent de provoquer l'échec des scripts existants s'ils sont exécutés sur des données non
valides d'un fichier de données. Par exemple, bcp vérifie maintenant :


que la représentation native des types de données real ou float est valide ;
que les données Unicode ont une longueur de données paire.
Remarque : Certaines formes de données non valides qui pouvaient être importées en bloc
dans les versions précédentes de SQL Server peuvent désormais ne pas réussir à se charger.
Dans les versions précédentes, l'échec ne survenait pas avant qu'un client essaie d'accéder aux
données non valides. La raison de cette nouvelle validation est que la validation avant le
chargement des données réduit le risque de mauvaise surprise lorsque vous interrogez les
données après le chargement en bloc.
L'utilitaire bcp prend en charge les indicateurs suivants pour une conversion sans perte de
données :
Indicateur Signification
Explication et remarques
-C xxx
Spécificateur de page xxx peut spécifier une page de code, ANSI, OEM ou
de code
RAW. Cette option est prise en charge pour la
compatibilité avec les versions antérieures de SQL Server.
Pour SQL Server 7.0 et versions ultérieures. Microsoft
recommande la spécification d'un nom de classement pour
chaque colonne d'un fichier de format.
ANSI : Microsoft Windows (ISO 1252).
OEM : page de code par défaut utilisée par le client. Il
s'agit de la page de code par défaut utilisée si -C n'est pas
spécifié.
RAW : Aucune conversion de page de code vers une autre
n'est effectuée. C'est l'option la plus rapide.
-N
Utiliser le format
Unicode natif
Code_page : Utiliser cette option uniquement si les
données contiennent des colonnes char, varchar ou text
avec des valeurs de caractères supérieures à 127 ou
inférieures à 32.
Utilise les types de données natifs (de la base de données)
pour toutes les données de type non caractère et le format
de caractère Unicode pour toutes les données de type
caractère.
-w
Utiliser le format de
caractères Unicode
Cette option offre une alternative hautes performances à
l'option -w et est prévue pour le transfert de données d'une
instance de SQL Server vers une autre à l'aide d'un fichier
de données. Elle ne vous avertit pas pour chaque champ.
Utilisez cette option lorsque vous transférez des données
contenant des caractères étendus ANSI et que vous voulez
tirer parti des performances du mode natif. Elle ne peut
pas être utilisée avec SQL Server 6.5 ou les versions
antérieures.
Utilise le format de données de caractères Unicode pour
toutes les colonnes.
Cette option n'affiche pas une invite pour chaque champ.
Elle utilise nchar comme type de stockage, aucun préfixe,
\t (caractère de tabulation) comme séparateur de champs et
\n (caractère de nouvelle ligne) comme terminateur de
ligne. Elle ne peut pas être utilisée avec SQL Server 6.5
ou les versions antérieures.
Vous pouvez également utiliser les fichiers de format et spécifier des classements au niveau
de chaque colonne. Si vous ne spécifiez pas -C, -N ou -w, bcp demandera les informations
concernant le classement et la page de code concernant chaque colonne avant d'exécuter
l'importation ou l'exportation. Vous serez ensuite invité à enregistrer ces informations dans un
fichier de format, comme illustré ici :
9.0
9
1
2
3
4
5
6
7
8
9
SQLCHAR
SQLCHAR
SQLCHAR
SQLCHAR
SQLCHAR
SQLCHAR
SQLCHAR
SQLCHAR
SQLBIT
0
0
0
0
0
0
0
0
0
11
40
20
12
40
20
2
5
1
""1
au_id
Latin1_General_CI_AI
""
2
au_lname
Latin1_General_CI_AI
""
3
au_fname
Latin1_General_CI_AI
""
4
phone
Latin1_General_CI_AI
""
5
address
Latin1_General_CI_AI
""
6
city
Latin1_General_CI_AI
""
7
state
Latin1_General_CI_AI
""
8
zip
Latin1_General_CI_AI
""
9
contract
""
Pour plus d'informations sur les fichiers de format, consultez la section Comprendre les
fichiers de format non XML dans la documentation en ligne de SQL Server 2005.
SQL Server 2005 a introduit un fichier au format XML pour bcp. Les fichiers au format XML
présentent de nombreux avantages : Ils contiennent des descriptions des colonnes de la table
correspondante et les types de données des colonnes cibles. Les fichiers XML sont faciles à
lire, à créer et à étendre. Vous pouvez créer un fichier au format XML en utilisant bcp, avec
l'option –x. Après la création du fichier de format, vous pouvez l'utiliser pour importer ou
exporter des données avec bcp et l'option -f.
Le tableau suivant répertorie les types de données qui peuvent être importés ou exportés avec
bcp. Le classement est le classement par défaut spécifié pour la colonne et il peut avoir été
hérité de la base de données ou du serveur.
Type
C
T
I
S
T
F
M
B
D
X
I
D
r
M
n
E
W
W
U
Nom complet
char
text
int
smallint
tinyint
float
money
bit
datetime
binary
image
smalldatetime
real
smallmoney
numeric
decimal
nchar
ntext
uniqueidentifier
Notez que les types de données varchar et nvarchar ne sont pas répertoriés dans le tableau.
Pour l'utilitaire bcp, les types de données char et nchar doivent être utilisés à leur place,
respectivement.
Enfin, bcp prend en charge l'indicateur -R pour l'activation régionale. Cet indicateur a le
même effet que l'option ODBC Utiliser les paramètres régionaux, ce qui peut affecter
l'interprétation des données de date/heure, de nombres et de devises qui sont stockées dans
des champs non textuels.
sqlcmd
L'utilitaire sqlcmd est nouveau dans SQL Server 2005 et fournit des fonctionnalités
précédemment fournies par une combinaison d'osql, d'isql, de fichiers batch et de VBScript.
Cet utilitaire utilise OLE DB pour exécuter les lots Transact-SQL.
Vous pouvez exécuter des requêtes ad hoc de façon interactive depuis une fenêtre d'invite de
commande ou exécuter un script qui contient des instructions Transact-SQL ou des
procédures système. Vous pouvez créer des fichiers de script et exécuter ensuite les scripts
dans l'invite de commande, dans l'Éditeur de requête dans le mode SQLCMD, dans un fichier
script Windows ou dans une étape de travail de système d'exploitation (Cmd.exe) d'une tâche
de l'Agent SQL Server.
Vous pouvez utiliser l'option -f pour spécifier la page de code d'entrée et la page de code de
sortie.
Le numéro de page de code doit être une valeur numérique qui spécifie une page de code
Windows installée. Si aucune page de code n'est spécifiée, sqlcmd utilise la page de code du
système actuel pour les fichiers d'entrée et de sortie. Cependant, vous pouvez utiliser l'option u pour faire en sorte que le fichier de sortie soit stocké dans le format Unicode, quel que soit
le format du fichier d'entrée.
Les exemples suivants démontrent cette syntaxe. Le fichier script Myscript.sql contient la
requête suivante :
'USE AdventureWorks; GO; SELECT * FROM
Production.vProductAndDescription; ORDER BY CultureID;'
Le premier exemple exécute la requête et enregistre le résultat dans un fichier dans Unicode.
Le deuxième exemple exécute la même requête, mais le fichier de sortie est enregistré dans la
page de code ayant l'ID 950. Une erreur peut survenir si la page de code n'est pas disponible.
sqlcmd -i C:\Temp\MyScript.sql -o C:\temp3\MyOutput1.txt -u
sqlcmd -i C:\ Temp\MyScript.sql -f1252 -o C:\temp3\MyOutput2.txt -f950
Sqlcmd reconnaît automatiquement les fichiers d'entrée Unicode big-endian et little-endian.
Si l'option -u a été spécifiée, la sortie sera toujours Unicode little-endian.
On suppose que les fichiers d'entrée multiples sont de la même page de code. Les fichiers
d'entrée Unicode et non Unicode peuvent être mélangés.
Vous pouvez créer et modifier des scripts sqlcmd en utilisant l'Éditeur de requête dans
SQL Server Management Studio (SSMS). Cependant, SSMS utilise Microsoft .NET SqlClient
pour l'exécution, tandis que sqlcmd utilise le fournisseur OLE DB lorsque vous exécutez un
script à partir de la ligne de commande. Par conséquent, vous pourriez constater un
comportement différent lorsque vous exécutez la même requête dans
SQL Server Management Studio dans le mode SQLCMD et dans l'utilitaire sqlcmd.
Fonctionnalités internationales dans
SQL Server Analysis Services
Microsoft SQL Server 2005 Analysis Services prend en charge toutes les langues qui sont
prises en charge par les systèmes d'exploitation Microsoft Windows. Analysis Services utilise
des identificateurs de langue Windows pour spécifier la langue sélectionnée pour les instances
et les objets Analysis Services. Un identificateur de langue Windows correspond à une
combinaison d'identificateurs de langues principales et de sous-langues Windows. Par
exemple, si vous sélectionnez anglais (États-Unis) pendant l'installation, l'identificateur de
langue Windows correspondant, 0x0409 (ou 1033), est spécifié dans l'élément Langue du
fichier des paramètres de configuration pour l'instance d'Analysis Services.
Traductions
En plus de spécifier la langue et le classement par défaut utilisés par une instance d'Analysis
Services, vous pouvez également fournir la prise en charge multilingue pour les objets
individuels Analysis Services, notamment les cubes, les groupes de mesures, les dimensions,
les hiérarchies et les attributs, en définissant une traduction associée à un objet Analysis
Services.
Vous pouvez utiliser Business Intelligence Development Studio pour définir les traductions
pour la légende, la description et les types de comptes pour une base de données Analysis
Services. Lorsque vous utilisez des traductions, les applications clientes peuvent recevoir des
objets Analysis Services dans une langue et un classement différents.
Les paramètres de langue et de classement par défaut pour une instance d'Analysis Services
spécifient les paramètres utilisés pour les données et les métadonnées si la traduction pour un
identificateur de langue spécifique n'est pas fournie pour un objet Analysis Services ou si une
application cliente ne spécifie pas d'identificateur de langue lors de la connexion à une
instance d'Analysis Services.
Notez que, bien que les traductions fournissent informations d'affichage pour les noms des
objets Analysis Services, les identificateurs ne sont pas traduits. Pour assurer la portabilité sur
plusieurs langues, utilisez les identificateurs et clés pour les objets Analysis Services plutôt
que les légendes et noms traduits. Utilisez par exemple des clés de membres plutôt que des
noms de membres pour les instructions et scripts Multidimensional Expressions (MDX).
Si une application cliente demande des informations dans un identificateur de langue spécifié,
l'instance d'Analysis Services tente de résoudre les données et métadonnées pour les objets
Analysis Services avec l'identificateur de langue le plus proche possible. Si l'application
cliente ne spécifie pas de langue par défaut ou si elle spécifie l'identificateur des paramètres
régionaux neutre (0) ou l'identificateur de langue par défaut du processus (1024), Analysis
Services utilise la langue par défaut pour l'instance afin de renvoyer les données et
métadonnées pour les objets d'Analysis Services.
Si l'application cliente spécifie un identificateur de langue autre que l'identificateur de langue
par défaut, l'instance effectue une itération sur toutes les traductions disponibles pour tous les
objets disponibles. Si l'identificateur de langue spécifié correspond à l'identificateur de langue
d'une traduction, Analysis Services renvoie cette traduction. Si aucune correspondance n'est
trouvée, Analysis Services tente d'utiliser l'une des méthodes suivantes pour renvoyer des
traductions avec un identificateur de langue le plus proche de l'identificateur de langue
spécifié.
Pour les identificateurs de langue suivants, Analysis Services tente d'utiliser un autre
identificateur de langue si aucune traduction n'est définie pour l'identificateur de langue
spécifié.
Identificateur de langue spécifié
Autre identificateur de langue
3076: Chinois (RAS de Hong Kong, RPC) 1028: Chinois (Taïwan)
5124: Chinois (RAS de Macao)
1028: Chinois (Taïwan)
1028: Chinois (Taïwan)
Langue par défaut
4100: Chinois (Singapour)
2052: Chinois (RPC)
2074: Croate
Langue par défaut
3098: Croate (Cyrillique)
Langue par défaut
Pour tous les autres identificateurs de langue spécifiés, Services Analysis extrait la langue
principale de l'identificateur de langue spécifié et récupère l'identificateur de langue indiqué
par Windows comme étant la meilleure correspondance pour la langue principale. Si aucune
traduction pour le meilleur identificateur de langue n'est trouvée ou si l'identificateur de
langue spécifié est la meilleure correspondance pour la langue principale, la langue par défaut
est utilisée.
Classements dans Analysis Services
Analysis Services utilise des classements Windows pour spécifier le classement sélectionné
pour les instances et les objets Analysis Services. Lorsque vous spécifiez un classement
Windows pour Analysis Services, l'instance d'Analysis Services utilise les mêmes pages de
code et règles de tri et de comparaison qu'une application s'exécutant sur un ordinateur pour
lequel vous avez spécifié les paramètres régionaux Windows associés. Par exemple, le
classement Windows français pour Analysis Services correspond aux attributs de classement
des paramètres régionaux français pour Windows.
Il y a plus de paramètres régionaux Windows qu'il y a de classements Windows définis pour
Analysis Services. Les noms de paramètres régionaux Windows sont basés sur un
identificateur de langue, tel que Anglais, et un identificateur de sous-langue, tel que ÉtatsUnis ou Australie. Cependant, de nombreuses langues utilisent les mêmes alphabets et règles
de tri et de comparaison des caractères.
Par exemple, 33 paramètres régionaux Windows, notamment tous les paramètres régionaux
Windows Portugais et Anglais, utilisent la page de code Latin1 (1252) et suivent un ensemble
de règles commun pour trier et comparer les caractères. Le classement SQL Server Windows
Latin1_General, basé sur cette page de code et les règles de tri associées, prend en charge ces
33 paramètres régionaux Windows. De plus, les paramètres régionaux Windows spécifient
des attributs qui ne sont pas couverts par les classements Windows Analysis Services, tels que
les formats de devise, de date et d'heure. Comme les pays et régions tels que l'Australie et les
États-Unis ont des formats de devise, de date et d'heure différents, ils requièrent des
classements Windows différents. Ils n'ont cependant pas besoin de classements Windows
Analysis Services différents, parce qu'ils utilisent le même alphabet et les mêmes règles de tri
et de comparaison des caractères.
Bien que plusieurs identificateurs de langue puissent être spécifiés pour les objets Analysis
Services, le même classement Windows Analysis Services est utilisé pour tous les objets
Analysis Services, avec une seule exception, quel que soit l'identificateur de langue. La seule
exception à cette fonctionnalité est la propriété CaptionColumn d'un attribut dans une
dimension de base de données, pour laquelle vous pouvez spécifier un classement Windows
Analysis Services pour compiler les membres de l'attribut spécifié.
Options d'ordre de tri dans Analysis Services
Si la même langue est utilisée par tous les utilisateurs pour votre instance d'Analysis Services,
sélectionnez le classement qui prend en charge la langue par défaut spécifiée pour votre
instance. Si plusieurs langues sont utilisées, choisissez le classement qui propose la meilleure
prise en charge pour les exigences des diverses langues. Par exemple, si les utilisateurs de
votre instance parlent surtout des langues d'Europe de l'ouest, sélectionnez le classement
Latin1_General classement.
Plusieurs options d'ordre de tri peuvent être appliquées au classement Windows Analysis
Services spécifié pour définir davantage les règles de tri et de comparaison en fonction du
respect de la casse, des accents, du kana et de la largeur. Les options d'ordre de tri sont les
mêmes pour le moteur de base de données SQL Server : Vous pouvez définir la sensibilité à la
casse et à la largeur, aux accents et au type de kana.
Si vous utilisez l'identificateur de langue Anglais (États-Unis) (0x0409 ou 1033) comme
langue par défaut pour l'instance d'Analysis Services, vous pouvez obtenir des avantages de
performances supplémentaires en définissant la propriété de configuration
EnableFast1033Locale. Il s'agit d'une propriété de configuration avancée qui est disponible
uniquement pour cet identificateur de langue. La définition de cette valeur sur true permet à
Analysis Services d'utiliser un algorithme plus rapide pour hacher et comparer les chaînes.
Remarque : La possibilité d'avoir des classements différents dans des parties différentes de
structures de données hiérarchiques constituant un magasin de données n'est pas prise en
charge. Bien que cela ne soit généralement pas utile dans l'analyse des données, il y a des cas
tels que le partitionnement alphabétique des données dans lesquels cela pourrait être utile.
Dans de tels cas, vous devez proposer une autre façon de partitionner les données, qui définit
explicitement l'ordre et les partitions et ne suppose pas l'ordre des lettres. Cela serait
également très utile pour l'affichage de données hiérarchiques. Si vous avez besoin d'une telle
fonctionnalité, vous trierez le sous-ensemble des données renvoyées à partir de la source
OLAP.
Prise en charge de plusieurs devises
Analysis Services fournit une prise en charge de la conversion de devises dans des cubes qui
contiennent plusieurs devises. Pour pouvoir définir une conversion de devises dans un cube,
vous devez commencer par définir au moins une dimension de devise, au moins une
dimension de temps et au moins un groupe de mesures de taux. À partir de ces objets,
l'Assistant Business Intelligence Wizard peut récupérer les données et métadonnées utilisées
pour construire la dimension de devise des rapports et créer un script MDX pour offrir une
fonctionnalité de conversion de devises.
Pour pouvoir implémenter les conversions de devises, vous devez définir les éléments
suivants :
Terme
Devise pivot
Devise locale
Définition
Devise par rapport à laquelle les taux de change sont entrés dans le
groupe de mesure de taux.
Devise utilisée pour stocker les transactions sur lesquelles les mesures
convertibles sont basées.
La devise locale peut être identifiée par l'un des attributs suivants :

Un identificateur de devise dans la table de faits stockée avec
la transaction. C'est souvent le cas dans les applications

Devise de rapports
Direction du taux de
change
Éléments convertis
Type de conversion
bancaires, où la transaction elle-même identifie la devise
utilisée pour cette transaction.
Un identificateur de devise associé à un attribut dans une table
de dimension, qui est ensuite associé à une transaction dans la
table de faits. C'est souvent le cas dans les applications
financières, où un emplacement ou un autre identificateur, tel
qu'une filiale, identifie la devise utilisée pour une transaction
associée.
Devise vers laquelle les transactions sont converties à partir de la
devise pivot.
Indique si le multiplicateur est appliqué à la devise pivot ou à la
devise d'exemple. La combinaison de la direction du taux de change
et du type de conversion détermine l'opération réalisée sur les mesures
à convertir.
Spécifie l'étendue du calcul de la conversion de devises.
Indique comment les transactions sont stockées et combien de devises
doivent être utilisées dans la conversion.



Un vers plusieurs : Stocke en tant que devise pivot. Convertit
vers plusieurs devises de rapports.
Plusieurs vers un : Stocke en tant que devise locale.
Convertit vers la devise pivot, qui est utilisée comme seule
devise de rapports.
Plusieurs à plusieurs : Stocke en tant que devise locale.
Convertit vers la devise pivot, puis vers plusieurs devises de
rapports.
Vous pouvez ensuite utiliser l'Assistant Business Intelligence Wizard pour produire un script
MDX qui utilise une combinaison de données et métadonnées des dimensions, attributs et
groupes de mesures pour convertir les mesures contenant des données de devises. Pour plus
d'informations sur la manière d'utiliser l'Assistant afin de créer des conversions de devises,
consultez la section Utilisation de conversions de devises (SSAS) dans la documentation en
ligne de SQL Server 2005.
Utilisation de valeurs de date et d'heure dans SSAS
Lorsque vous exécutez des comparaisons et des opérations entre le mois et le jour de la
semaine, utilisez les parties de date et d'heure numériques plutôt que des chaînes de parties de
date et d'heure. Les chaînes de parties de date et d'heure sont déterminées d'une part par
l'identificateur de langue spécifié pour l'instance, et d'autre part par la traduction actuelle
fournie par l'instance pour les membres de la dimension de temps.
Vous devriez exploiter les diverses fonctions de date et d'heure dans MDX pour l'utilisation
de dimensions de temps. Les fonctions de date et d'heure de Visual Basic for Applications
(VBA) sont également très utiles pour le renvoi de parties de date et d'heure numériques
plutôt que les chaînes de nom. Pour les applications clientes, utilisez des chaînes de parties de
date et d'heure littérales lors du renvoi de résultats qui seront affichés pour un utilisateur,
parce que les chaînes sont généralement plus significatives qu'une représentation numérique.
Toutefois, ne codez pas les logiques qui dépendent de l'affichage des noms dans une langue
spécifique.
Prise en charge de XML dans SQL Server 2005
SQL Server 2005 présente SQLXML 4.0, qui offre les mêmes fonctionnalités de base que
SQLXML 3.0, plus des mises à jour supplémentaires pour tenir compte de nouvelles fonctions
introduites dans Microsoft SQL Server 2005.
SQL Server 2005 prend en charge le type de données xml, qui vous permet de stocker des
documents et des fragments XML dans une base de données SQL Server. Un fragment XML
est une instance XML à laquelle il manque un seul élément de premier niveau. Vous pouvez
créer des colonnes et des variables du type xml et stocker des instances de XML dedans, si la
représentation stockée ne dépasse pas 2 Go. Le type de données xml et les méthodes associées
aident à intégrer XML dans l'infrastructure relationnelle de SQL Server.
XML et Unicode
Le type de données xml de SQL Server 2005 implémente le type de données xml standard
d'ISO SQL-2003. Par conséquent, il peut non seulement stocker les documents XML
version 1.0 bien formés, mais également les fragments de contenus XML avec des nœuds de
texte. Le système vérifie que les données sont bien formées, n'a pas besoin que la colonne soit
reliée à des schémas XML et rejette les données qui ne sont pas bien formées.
Dans SQL Server 2005, vous pouvez générer des codes XML de diverses façons : vous
pouvez taper les chaînes de distribution, utiliser l'instruction SELECT avec la clause XLM
FOR, utiliser le chargement en masse ou attribuer le XML à une constante de chaîne. Pour
obtenir des informations sur la façon dont les types chaîne et binaire interagissent avec
l'encodage de documents XML et sur le comportement de l'analyseur XML, consultez la
section Génération d'instances XML dans la documentation en ligne de SQL Server 2005.
Les documents XML peuvent être codés avec des encodages différents ; par exemple, UTF-8,
UTF-16 ou Latin-1252. Vous pouvez spécifier un encodage dans XML de plusieurs façons :



Si vous formatez des données en XML dans un objet ADO Stream et que vous
conservez ensuite le flux, vous pouvez spécifier un encodage de sortie et le bon
encodage sera marqué dans les données formatées XML.
Vous pouvez spécifier un encodage de sortie dans une URL.
Les modèles XML peuvent spécifier un encodage.
Même si vous n'utilisez aucune de ces méthodes, Unicode est pris en charge par défaut et il
fonctionnera correctement.
Remarque : Le type de données xml de SQL Server 2005 ne gère pas l'espace blanc
directement suivant la description de l'espace blanc dans la spécification XML 1.0. Dans
SQL Server, l'espace blanc se trouvant à l'intérieur d'un contenu d'élément est considéré
comme insignifiant s'il survient à l'intérieur d'une séquence de données de caractères à espace
blanc uniquement délimitées par un balisage, tel que des balises de début ou de fin, et ne
constitue pas une entité. (Les sections CDATA sont ignorées). Ce la est dû au fait que
l'analyseur XML dans SQL Server reconnaît uniquement un certain nombre de sousensembles DTD, comme défini dans XML 1.0. Pour plus d'informations sur les sousensembles DTD limités pris en charge dans SQL Server 2005, consultez la section
DISTRIBUTION ET CONVERSION (Transact-SQL) dans la documentation en ligne de
SQL Server 2005.
Updategrams (codes de mise à jour)
Vous pouvez modifier (insérer, mettre à jour ou supprimer) des données dans une base de
données Microsoft SQL Server 2005 à partir d'un document XML existant en utilisant un
updategram ou la fonction Transact-SQL OPENXML. Les codes de mise à jour
(Updategrams) sont conçus pour être adaptés aux textes multilingues et aux méthodes de prise
en charge permettant de spécifier l'encodage.
La fonction OPENXML modifie une base de données en décomposant le document XML
existant et en fournissant un ensemble de lignes qui peut être transmis à une instruction
INSERT, UPDATE ou DELETE. Avec OPENXML, les opérations sont exécutées
directement par rapport aux tables de bases de données. Par conséquent, OPENXML est
particulièrement approprié lorsque les fournisseurs d'ensembles de lignes, tels que les tables,
peuvent apparaître en tant que source.
Comme OPENXML, un updategram permet d'insérer, de mettre à jour ou de supprimer des
données dans la base de données ; cependant, un updategram fonctionne par rapport aux vues
XML fournies par le schéma XSD (ou XDR) annoté. Par exemple, les mises à jour sont
appliquées à la vue XML fournie par le schéma de mappage. Le schéma de mappage, pour sa
part, dispose des informations nécessaires pour associer les éléments et attributs XML aux
tables et colonnes de bases de données correspondantes. L'updategram utilise ces informations
de mappage pour mettre à jour les tables et colonnes de bases de données.
Accès aux données pour les clients XML
Pour utiliser SQLXML 4.0, vous devez également disposer de Microsoft SQL Native Client et
de MDAC 2.6 ou version ultérieure. Lors du déploiement d'une application dépendant de
SQL Native Client, vous devrez redistribuer SQL Native Client avec votre application.
Contrairement à Microsoft Data-Access Components (MDAC), qui est maintenant un
composant du système d'exploitation, SQL Native Client est un composant de
SQL Server 2005. Par conséquent, il importe d'installer SQL Server Native Client dans votre
environnement de développement et de redistribuer SQL Native Client avec votre application.
Dans les versions précédentes de SQLXML, l'exécution de requêtes HTTP était prise en
charge en utilisant les répertoires virtuels SQLXML IIS et le filtre ISAPI SQLXML. Dans
SQLXML 4.0, ces composants ont été supprimés car des fonctionnalités similaires et
redondantes sont maintenant fournies avec les services Web XML natifs dans
SQL Server 2005. Si votre solution nécessite les fonctions de typage de données avancées de
SQL Server 2005, telles que le type de données xml ou les types de données définis par
l'utilisateur et un accès par le Web, vous devrez utiliser une autre solution, telle que les classes
gérées par SQLXML ou un autre type de gestionnaire HTTP, tel que les services Web Native
XML pour SQL Server 2005.
Si vous n'avez pas besoin de ces extensions de type de SQL Server 2005, vous pouvez
continuer à utiliser SQLXML 3.0 pour vous connecter à des installations SQL Server 2005.
La prise en charge ISAPI de SQLXML 3.0 fonctionnera sur SQL Server 2005, mais elle ne
prend pas en charge et ne reconnaît pas le type de données xml ou la prise en charge de type
UDT introduite dans SQL Server 2005.
Pour une présentation du jeu complet des fonctionnalités XML dans SQL Server 2005,
consultez les sections Utilisation de XML dans SQL Server et Méthodes XML recommandées
dans la documentation en ligne de SQL Server 2005.
Pour des informations sur l'utilisation de XML dans des applications clientes, consultez les
sections Utilisation du type de données xml dans des applications et Programmation de
SQLXML 4.0 dans la documentation en ligne de SQL Server 2005.
Améliorations de la recherche de texte intégral
La recherche de texte intégral de SQL Server 2005 inclut une mise à niveau majeure du
service Microsoft Search (MSSearch) vers la version 3.0. Ces améliorations incluent les
fonctionnalités suivantes :




Amélioration considérable des performances de création d'index de texte intégral
Une instance de MSSearch 3.0 par instance de SQL Server, ce qui permet une
installation côte à côte du moteur de texte intégral sur des instances séparées
Améliorations des requêtes, notamment la possibilité de spécifier la langue
Prise en charge de l'indexation de texte intégral et de la recherche du type de données
xml
Instances multiples du moteur de texte intégral
Le service de moteur de texte intégral Microsoft pour SQL Server (MSFTESQL) est basé sur
le service Microsoft Search (MSSearch). Dans SQL Server 2005, un service distinct est
installé par instance de Microsoft SQL Server. Ceci signifie que SQL Server n'a plus besoin
de partager le service MSSearch avec les d'autres produits de serveur utilisant le service
MSSearch. Le fait de disposer d'instances séparées du moteur de texte intégral simplifie
également le processus de gestion et de mise à jour des serveurs. Vous pouvez installer
d'autres produits qui utilisent le service MSSearch, tels que Microsoft Sharepoint Portal
Server, sans craindre qu'une version plus récente du service MSSearch n'affecte le
comportement de la recherche de texte intégral.
La mise à niveau vers la nouvelle version de MSSearch se fait pendant l'installation de
SQL Server 2005. Une instance de SQL Server 2005 est configurée parallèlement à l'ancienne
version de SQL Server et les données sont migrées. Si la recherche de texte intégral était
installée dans l'ancienne version de SQL Server, une nouvelle version de la recherche de texte
intégral est installée automatiquement.
Modifications de formats dans les catalogues de texte intégral
Le format des catalogues de texte intégral a beaucoup changé dans SQL Server 2005. Cette
modification nécessite la reconstruction de tous les catalogues de texte intégral des versions
précédentes de SQL Server. La reconstruction survient automatiquement et ne compromet pas
la mise à niveau. Par conséquent, la reconstruction de catalogues de texte intégral peut
continuer après la mise à niveau.
Lorsque le catalogue de texte intégral est reconstruit, un nouveau dossier est créé sous le
chemin où se trouvait initialement le catalogue de texte intégral. Les fichiers associés aux
catalogues de texte intégral reconstruits sont répertoriés dans ce nouveau dossier.
Options spécifiques à la langue pour la recherche de texte intégral
Dans Microsoft SQL Server 2005, les requêtes de texte intégral peuvent utiliser des langues
autres que la langue par défaut pour la colonne pour rechercher des données de texte intégral.
Tant que la langue est prise en charge et que ses ressources sont installées, la langue spécifiée
dans la clause language_term LANGAGE de la requête CONTAINS, CONTAINSTABLE,
FREETEXT, et FREETEXTTABLE sera utilisée pour la césure de mots, le radical et le
traitement des mots parasites et synonymes.
Lorsque vous créez un index de texte intégral sur une colonne, vous devez choisir la langue de
la colonne. En choisissant une langue, vous définissez des options pour la façon dont le texte
est marqué puis indexé par le moteur de texte intégral. Ces options sont notamment :


Utilisation d'un séparateur de mots spécifique ou du séparateur de mots neutre
Radical basé sur la langue
L'Annexe E contient une liste des langues prenant en charge le radical ou la césure de mots
spécifiques à la langue. Toutes les autres langues utilisent le moteur indépendant de la langue.
Dans ce cas, la césure de mots utilise l'espace blanc pour la séparation et aucun radical n'est
réalisé.
Les séparateurs de mots sont principalement conçus pour traiter du texte brut ; donc, si vous
avez n'importe quel type de balise (HTML, par exemple) dans votre texte, vous risquez de ne
pas obtenir une grande précision linguistique pendant l'indexation et la recherche. Dans ce
cas, vous avez deux solutions : la méthode préférée consiste à stocker les données de texte
dans la colonne varbinary(max) et à indiquer son type de document pour permettre son
filtrage.
Si vous ne pouvez pas enregistrer vos données dans une colonne varbinary(max), vous
pouvez envisager d'utiliser le séparateur de mots neutre. Si possible, vous pouvez également
ajouter des données de balise (telles que la balise « br » dans HTML) à vos listes de mots
parasites. Lorsque les données ne sont pas stockées dans une colonne varbinary(max), aucun
filtre particulier n'est exécuté. En fait, le texte passe par le composant de séparation de mots
tel quel.
Le paramètre d'identificateur des paramètres régionaux du classement Unicode est utilisé sur
tous les types de données éligibles pour l'indexation de texte intégral (par exemple, char,
nchar, etc.). Si vous avez spécifié l'ordre de tri d'une colonne char, varchar ou text à l'aide
d'un paramètre de langue différent de la langue de l'identificateur de paramètres régionaux du
classement Unicode, l'identificateur des paramètres régionaux du classement Unicode
continue d'être utilisé pendant l'indexation de texte intégral et l'interrogation des colonnes
char, varchar et text.
Améliorations des requêtes pour la recherche de texte intégral
La syntaxe de requête de texte intégral de SQL Server 2005 pour les clauses CONTAINS,
CONTAINSTABLE, FREETEXT et FREETEXTTABLE prend en charge un nouveau
paramètre <lcid> qui peut être utilisé pour remplacer la langue du texte intégral de la colonne
par défaut par une langue du niveau de la clause. Cette langue au niveau de la clause indique
la liste de séparateurs de mots, analyseurs morphologiques, synonymes et mots parasites à
utiliser pour tous les termes de la requête de texte intégral. Le LCID est spécifié soit sous la
forme d'une valeur numérique soit sous la forme d'une chaîne. La valeur du paramètre <lcid>
LANGUAGE peut également être spécifiée comme une variable Transact-Sql si elle est
utilisée dans une clause de requête de texte intégral dans une procédure stockée.
Vous pouvez par exemple transmettre la chaîne de recherche et la valeur de langue au niveau
la requête en tant que paramètre pour une procédure stockée qui obtient la chaîne de recherche
à partir d'un champ de saisie de texte et la langue de la requête à partir d'une liste des langues
prises en charge.
Pour obtenir un exemple de code illustrant l'utilisation du paramètre LCID, consultez l'article
Recherche de texte intégral de SQL Server 2005 : données internes et améliorations dans la
bibliothèque MSDN. Pour plus d'informations sur la manière d'utiliser le paramètre LCID
dans les requêtes de texte intégral, consultez les sections FREETEXT (Transact-SQL),
FREETEXTTABLE (Transact-SQL), CONTAINS (Transact-SQL) ou CONTAINSTABLE
(Transact-SQL) dans la documentation en ligne de SQL Server 2005.
Dans les versions antérieures, le mappage de DocIds vers des valeurs-clés de texte intégral se
faisait dans le moteur de texte intégral. Dans SQL Server 2005, ce processus a été déplacé
vers le moteur de base de données où des stratégies de mise en cache plus efficaces et
cohérentes peuvent être utilisées. Cette migration, en plus des améliorations du moteur de
requête, devrait accélérer les requêtes de texte intégral par rapport aux versions antérieures.
Recherche de texte intégral de données XML
SQL Server 2005 présente un nouveau type de données xml qui vous autorise à stocker un
fragment ou document XML. La recherche de texte intégral dans SQL Server prend
maintenant en charge la création d'index de texte intégral sur et les requêtes de texte intégral
par rapport dans les données stockées dans le type de données xml.
Les requêtes ont la granularité de la valeur de colonne. Les prédicats de texte intégral émis par
rapport à une colonne XML indexée en texte intégral renvoient des lignes où la chaîne de
recherche spécifiée existe n'importe où dans le contenu de la colonne. Pour plus
d'informations, consultez la section Interrogation des colonnes varbinary (max) et xml dans la
documentation en ligne de SQL Server 2005.
Interaction avec d'autres produits de bases de données
Lorsque vous travaillez avec autres systèmes de base de données, la tâche la plus importante
pour les applications internationales consiste à déterminer la page de code et les règles de ce
système. Un grand nombre des méthodes d'accès aux données pour SQL Server utilisent
COM et par là-même des données Unicode. SQL Native Client utilise également Unicode. Par
conséquent, le niveau de prise en charge d'Unicode par les autres produits de bases de
données est l'information principale dont vous avez besoin pour déterminer comment une
application internationale s'exécutera entre eux.
Par exemple, d'autres produits de bases de données tels qu'Oracle et Sybase SQL Server
prennent en charge Unicode par le biais de l'encodage UTF-8. D'habitude, ceci ne vous affecte
pas parce que les données doivent être converties en UTF-16 à l'aide d'ADO/OLE DB avant
que vous voyiez les informations. Vous devez cependant être conscient de cette différence, si
vous essayez d'interagir directement avec les données dans de tels produits.
Certains produits prennent en charge les types de données de caractère National, mais ne les
traitent pas comme des types de données Unicode. Pour de telles bases de données, nchar et
nvarchar sont des champs que vous pourriez utiliser pour stocker des données japonaises
dans une base de données anglaise (États-Unis). L'utilisation des types de données de
caractères National pour spécifier du texte Unicode est spécifique à Microsoft SQL Server.
Donc, si vous utilisez des commandes telles que OPENROWSET, si vous exécutez des
requêtes sur un autre produit ou si vous importez des données depuis d'autres systèmes, il est
très important que vous sachiez comment les informations de texte internationales sont gérées
dans l'autre base de données. Pour plus d'informations, consultez les sections Connexion au
moteur de base de données SQL Server et Requêtes distribuées dans la documentation en
ligne de SQL Server 2005.
Pour des informations sur la connexion à des sources de données externes dans
SQL Server 2005 pour le développement d'applications, consultez les sections suivantes dans
la documentation en ligne de SQL Server 2005 :
SQL Server Analysis Services (SSAS)
SQL Server Integration Services (SSIS)
SQL Server Reporting Services
Réplication de SQL Server
Présentation du pilote JDBC
Utilisation des sources de données (Analysis
Services)
Connexions d'Integration Services
Sources de données prises en charge par
Reporting Services
Réplication de base de données hétérogène
Accès aux données à partir d'objets de base de
données CLR
Conclusion
Microsoft SQL Server 2005 s'appuie sur la puissante série de fonctions internationales qui
étaient fournies dans SQL Server 2000 et ajoute une prise en charge d'Unicode améliorée,
plus cohérente, ainsi que l'intégration avec les fonctionnalités multilingues du système
d'exploitation Windows et du service CLR (Common Language Runtime). SQL Server 2005
combine des bases solides pour la prise en charge de bases de données internationales avec
une grande variété d'outils de développement multilingues pour le développement rapide et le
déploiement robuste de solutions internationales pour la finance, le commerce électronique et
la communication globale.
Pour plus d'informations :
SQL Server Developer Center
Ce document vous a-t-il aidé ? Merci de nous faire part de vos commentaires. Sur une échelle
de 1 (médiocre) à 5 (excellent), comment jugez-vous ce document ?
Remerciements
Ce document a été écrit à l'origine par Michael Kaplan pour SQL Server 2000, avec
l'assistance de Michael Kung, responsable de programme pour SQL Server, Peter Carlin,
responsable du développement pour le moteur relationnel de SQL Server, et Fernando Caro,
responsable de programme international principal. Des informations supplémentaires ont été
fournies par Michael Rys, Euan Garden, Fadi Fakhouri, James Howey et Margaret Li. Les
informations sur la prise en charge des classements de SQL Server 7.0 et 2000 ont été
fournies par Julie Bennett, Cathy Wissink et John McConnell.
Les informations mises à jour sur les fonctionnalités de SQL Server 2005 ont été fournies par
l'équipe User Education de SQL Server, avec l'assistance de Fernando Caro et de Nobuhiko
Kishi.
Annexe A : Suffixes de classement
Suffixe
_BIN
_CI_AI
_CI_AI_WS
_CI_AI_KS
_CI_AI_KS_WS
_CI_AS
_CI_AS_WS
_CI_AS_KS
_CI_AS_KS_WS
_CS_AI
_CS_AI_WS
_CS_AI_KS
_CS_AI_KS_WS
Signification
Tri binaire
non sensible à la casse, non sensible aux accents, non sensible au type de
kana, non sensible à la largeur
non sensible à la casse, non sensible aux accents, non sensible au type de
kana, sensible à la largeur
non sensible à la casse, non sensible aux accents, sensible au type de
kana, non sensible à la largeur
non sensible à la casse, non sensible aux accents, sensible au type de
kana, sensible à la largeur
non sensible à la casse, sensible aux accents, non sensible au type de
kana, non sensible à la largeur
non sensible à la casse, sensible aux accents, non sensible au type de
kana, sensible à la largeur
non sensible à la casse, sensible aux accents, sensible au type de kana,
non sensible à la largeur
non sensible à la casse, sensible aux accents, sensible au type de kana,
sensible à la largeur
sensible à la casse, non sensible aux accents, non sensible au type de
kana, non sensible à la largeur
sensible à la casse, non sensible aux accents, non sensible au type de
kana, sensible à la largeur
sensible à la casse, non sensible aux accents, sensible au type de kana,
non sensible à la largeur
sensible à la casse, non sensible aux accents, sensible au type de kana,
sensible à la largeur
_CS_AS
sensible à la casse, sensible aux accents, non sensible au type de kana,
non sensible à la largeur
_CS_AS_WS
sensible à la casse, sensible aux accents, non sensible au type de kana,
sensible à la largeur
_CS_AS_KS
sensible à la casse, sensible aux accents, sensible au type de kana, non
sensible à la largeur
_CS_AS_KS_WS sensible à la casse, sensible aux accents, sensible au type de kana,
sensible à la largeur
Remarque : La sensibilité au kana est définie par défaut sur non sensible. En d'autres
termes, par défaut, katakana et hiragana sont traités de la même façon. La sensibilité à la
largeur est également réglée sur non sensible par défaut. En d'autres termes, par défaut, les
caractères de pleine chasse et demi-chasse sont traités de la même façon.
Annexe B : Paramètres régionaux pris en charge dans
Windows
Anglais (us_english)
Allemand (Deutsch)
Français (Français)
Japonais (“ú–{Œê)
Danois (Dansk)
Espagnol (Español)
Italien (Italiano)
Néerlandais (Nederlands)
Norvégien (Norsk)
Portugais (Português)
Finnois (Suomi)
Suédois (Svenska)
Tchèque (èeština)
Hongrois (magyar)
Polonais (polski)
Roumain (românã)
Croate (hrvatski)
Slovaque (slovenèina)
Slovène (slovenski)
Grec (åëëçíéêÜ)
Bulgare (áúëãàðñêè)
Russe (ðóññêèé)
Turc (Türkçe)
Anglais britannique (British)
Estonien (eesti)
Letton (latviešu)
Lituanien (lietuviø)
Brésilien (Português - Brasil)
Chinois traditionnel (ÁcÅ餤¤å)
Coréen (çѱ¹¾î)
Chinois simplifié (?‘Ì’†•¶)
Arabe (Arabic)
Thaïlandais (ä·Â)
Annexe C : Ordres de tri spécifiques à SQL
Des ordres de tri spécifiques à SQL sont également inclus dans SQL Server 2005. Ces ordres
de tri spécifiques à SQL sont illustrés dans le tableau suivant. Un grand nombre d'entre eux
prennent en charge certaines des diverses parties des suffixes décrits précédemment, mais tous
les suffixes ne sont pas pris en charge.
SQL_1xCompat_CP850
SQL_Estonian_CP1257
SQL_Latin1_General_Pref_CP4
SQL_AltDiction_CP1253
SQL_Hungarian_CP1250
SQL_AltDiction_CP850
SQL_AltDiction_Pref_CP8
50
SQL_Croatian_CP1250
SQL_Czech_CP1250
SQL_Danish_Pref_CP1
SQL_EBCDIC037_CP1
SQL_EBCDIC273_CP1
SQL_Icelandic_Pref_CP1
SQL_Latin1_General_CP1
SQL_EBCDIC277_CP1
SQL_EBCDIC278_CP1
SQL_EBCDIC280_CP1
SQL_EBCDIC284_CP1
SQL_EBCDIC285_CP1
SQL_AltDiction_CP1253
37
SQL_Latin1_General_Pref_CP8
50
SQL_Latvian_CP1257
SQL_Lithuanian_CP1257
SQL_Latin1_General_CP1250 SQL_MixDiction_CP1253
SQL_Latin1_General_CP1251 SQL_Polish_CP1250
SQL_Latin1_General_CP1253 SQL_Romanian_CP1250
SQL_Latin1_General_CP1254 SQL_Scandinavian_CP850
SQL_Latin1_General_CP
SQL_Scandinavian_Pref_CP850
1255
SQL_Latin1_General_CP1256 SQL_Slovak_CP1250
SQL_Latin1_General_CP1257 SQL_Slovenian_CP1250
SQL_Latin1_General_CP437 SQL_SwedishPhone_Pref_CP1
SQL_Latin1_General_CP850 SQL_SwedishStd_Pref_CP1
SQL_Latin1_General_Pref_C SQL_Ukrainian_CP1251
P1
SQL_Hungarian_CP1250
SQL_Latin1_General_Pref_CP8
50
Annexe D : Langues prises en charge dans
SQL Server 2005
Vous pouvez afficher cette même liste dans SQL Server 2005 en exécutant cette instruction :
select langid, alias, lcid, msglangid from sys.syslanguages
Nom en français
Anglais
Allemand
Français
Japanese
Danois
Espagnol
Italien
Néerlandais
Norvégien
Portugais
Finnois
Suédois
Tchèque
Hongrois
Windows LCID
1033
1031
1036
1041
1030
3082
1040
1043
2068
2070
1035
1053
1029
1038
ID de message
1033
1031
1036
1041
1030
3082
1040
1043
2068
2070
1035
1053
1029
1038
Polonais
Roumain
Croate
Slovaque
Slovène
Grec
Bulgare
Russe
Turc
Anglais britannique
Estonien
Letton
Lituanien
Brésilien
Chinois traditionnel
Korean
Chinois simplifié
Arabe
Thaï
1045
1048
1050
1051
1060
1032
1026
1049
1055
2057
1061
1062
1063
1046
1028
1042
2052
1025
1054
1045
1048
1050
1051
1060
1032
1026
1049
1055
1033
1061
1062
1063
1046
1028
1042
2052
1025
1054
Annexe E : Langues de texte intégral ajoutées dans
SQL Server 2005
Cette liste est disponible également dans la section Considérations internationales pour la
recherche de texte intégral dans la documentation en ligne de SQL Server 2005. Pour une liste
complète des langues disponibles pour l'indexation et les opérations de requêtes de texte
intégral, utilisez sys.fulltext_langages.
Identificateur des paramètres régionaux de
classement Unicode
Chinois bopomofo (Taïwan)
Ponctuation chinoise
Nombre de traits chinois
Nombre de traits chinois (Taïwan)
Néerlandais
Anglais (Royaume-Uni)
Français
Unicode général
Allemand
Annuaire allemand
Italien
Japanese
Langue pour le stockage des données de
texte intégral
Chinois traditionnel
Chinois simplifié
Chinois simplifié
Chinois traditionnel
Néerlandais
Anglais (Royaume-Uni)
Français
Anglais (États-Unis)
Allemand
Allemand
Italien
Japanese
Unicode japonais
Korean
Unicode coréen
Espagnol (Espagne)
Suédois/finlandais
Japanese
Korean
Korean
Espagnol
Suédois
Annexe F : Classements mis à jour dans SQL Server 2005
Cette liste est également disponible dans la section Paramètres de classement dans
l'installation dans la documentation en ligne de SQL Server 2005. Pour une liste complète des
classements pris en charge dans une instance de SQL Server 2005, utilisez l'instruction
fn_helpcollations ().
Ancien nom de classement
Japanese
Chinese
Nouveau nom de classement
Japanese_90
Chinese_PRC_90
Chinese_PRC_Stroke
Chinese_PRC_Stroke_90
Chinese_Taiwan_Bopomofo
Chinese_Taiwan_Bopomofo_90
Chinese_Taiwan_Stroke
Korean
Hindi
Indic
Chinese_Taiwan_Stroke_90
Korean_90
(désapprouvé dans cette version)
General_90
Téléchargement