Classement et terminologie internationale

Les classements dans SQL Server fournissent les règles de tri et les propriétés de respect de la casse et des accents pour vos données. Les classements utilisés avec les types de données character, tels que char et varchar, déterminent la page de codes et les caractères correspondants qui peuvent être représentés pour ce type de données. Que vous installiez une nouvelle instance de SQL Server, restauriez une sauvegarde de base de données ou connectiez un serveur à des bases de données clientes, il est important que vous compreniez les besoins en termes de paramètres régionaux, ordre de tri et respect de la casse et des accents des données avec lesquelles vous travaillez.

Lorsque vous sélectionnez un classement pour votre serveur, base de données, colonne ou expression, vous assignez certaines caractéristiques à vos données qui affecteront les résultats de nombreuses opérations dans votre base de données. Par exemple, lorsque vous construisez une requête à l'aide d'ORDER BY, l'ordre de tri de votre jeu de résultats peut dépendre du classement appliqué à la base de données ou stipulé dans une clause COLLATE au niveau expression de la requête.

Un classement peut avoir tout ou partie des caractéristiques suivantes :

  • Respect de la casse

  • Respect des accents

  • Respect du jeu de caractères Kana

  • Respect de la largeur

Pour exploiter au mieux la prise en charge des classements dans SQL Server, vous devez comprendre les termes qui sont définis dans cette rubrique et la relation qu'ils entretiennent avec les caractéristiques de vos données.

Termes

  • Classement

  • Paramètres régionaux

  • Unicode

  • Page de codes

  • Type de données

  • Ordre de tri

Classement

Un classement désigne les modèles binaires qui représentent chaque caractère dans un jeu de données. Les classements déterminent également les règles de tri et de comparaison de données. SQL Server prend en charge le stockage d'objets ayant des classements différents dans une même base de données. Pour les colonnes non-Unicode, le paramètre de classement spécifie la page de codes pour les données et les caractères qui peuvent être représentés. Les données déplacées entre des colonnes non-Unicode doivent être converties de la page de codes source vers la page de codes de destination.

Le résultat d'une instruction Transact-SQL peut varier lorsque cette dernière est exécutée dans un contexte réunissant plusieurs bases de données dont chacune a un paramètre de classement différent. Dans la mesure du possible, choisissez un classement normalisé pour votre organisation. De cette manière, vous n'avez pas à spécifier explicitement le classement dans chaque caractère ou expression Unicode. Si vous devez utiliser des objets qui ont des paramètres de classement et de page de codes différents, codez vos requêtes conformément aux règles de priorité des classements. Pour plus d'informations, consultez Priorité de classement (Transact-SQL).

Un classement se caractérise par le respect de la langue, de la casse, des accents, des caractères Kana et de la largeur.

Les classements SQL Server incluent les jeux de classements suivants :

  • Classements Windows
    Les classements Windows définissent les règles de stockage des données de type caractère selon les paramètres régionaux système Windows associés. Pour un classement Windows, la comparaison de données non-Unicode est implémentée via le même algorithme que les données Unicode. Les règles de classement Windows de base spécifient l'alphabet ou la langue utilisée pour le tri du dictionnaire, et la page de codes utilisée pour stocker les données de type caractère non-Unicode. Les tris Unicode et non-Unicode sont compatibles avec les comparaisons de chaînes dans une version particulière de Windows. Les types de données sont ainsi cohérents dans SQL Server, ce qui permet aux développeurs de trier les chaînes dans leurs applications en appliquant les mêmes règles que celles utilisées par SQL Server. Pour plus d'informations, consultez Paramètres de classement du programme d'installation.

  • Classements binaires
    Les classements binaires trient les données en fonction de la séquence des valeurs codées qui sont définies par les paramètres régionaux et le type de données. Ils respectent la casse. Un classement binaire dans SQL Server définit les paramètres régionaux et la page de codes ANSI à utiliser. Cela applique un ordre de tri binaire. Parce qu'ils sont relativement simples, les classements binaires aident à améliorer les performances de l'application. Pour les types de données non-Unicode, les comparaisons de données sont basées sur les points de code qui sont définis dans la page de codes ANSI. Pour les données de type Unicode, les comparaisons de données se basent sur les points de code Unicode. Pour le classement binaire des types de données Unicode, les paramètres régionaux (la langue) ne sont pas pris en compte dans les tris de données. Par exemple, Latin_1_General_BIN et Japanese_BIN produisent des résultats de tri identiques quand ils sont utilisés avec des données Unicode.

    Les classements binaires des précédentes versions de SQL Server comparaient le premier caractère comme WCHAR, suivi d'une comparaison octet par octet. Pour des raisons de compatibilité descendante, la sémantique des classements binaires existante ne sera pas modifiée.

    Les classements binaires de cette version de SQL Server incluent un ensemble de classements de comparaison de points de code purs. Vous pouvez migrer vers les classements binaires pour tirer parti de comparaisons de point de code vraies. Vous devez utiliser des classements binaires pour développer de nouvelles applications. Le suffixe BIN2 identifie le nom des classements qui implémentent la sémantique des nouveaux classements par points de code. Il y a également un indicateur de comparaison qui correspond à BIN2 pour le nouveau tri binaire. Pour plus d'informations, consultez Principes d'utilisation des classements BIN et BIN2.

  • SQL Server
    Les classements (SQL_*) SQL Server fournissent la compatibilité d'ordre de tri avec les versions antérieures de SQL Server. Les règles de tri du dictionnaire pour les données non-Unicode ne sont pas compatibles avec les routines de tri fournies par les systèmes d'exploitation Windows. Toutefois, le tri de données Unicode est compatible avec une version particulière de règles de tri Windows. Comme les classements SQL Server utilisent des règles de comparaison différentes pour les données Unicode et non-Unicode, vous pouvez obtenir des résultats différents pour des comparaisons traitant des mêmes données, selon le type de données sous-jacent. Pour plus d'informations, consultez Utilisation des classements SQL Server.

    [!REMARQUE]

    Lorsque vous mettez à niveau une instance anglaise SQL Server, vous pouvez spécifier les classements (SQL_*) SQL Server pour permettre la compatibilité avec les instances SQL Server existantes. Le classement par défaut d'une instance SQL Server étant défini au cours de la procédure d'installation, il est important de spécifier soigneusement les paramètres de classement dans les cas suivants :

    • Votre code d'application dépend du comportement des classements SQL Server précédents.

    • Vous utiliserez la fonctionnalité de réplication SQL Server avec des instances existantes de SQL Server version 6.5 ou SQL Server version 7.0.

    • Vous devez stocker des données de caractères de plusieurs langues.

Les paramétrages des classements sont pris en charge aux niveaux suivants d'une instance SQL Server :

  • Classements au niveau du serveur
    Le classement par défaut est défini durant l'installation de SQL Server, et devient également le classement par défaut des bases de données système. Notez que les classements Unicode ne peuvent pas être sélectionnés pendant la procédure d'installation de SQL Server, car ils ne sont pas pris en charge en tant que classements au niveau du serveur.

    Lorsqu'un classement a été attribué à un objet autre qu'une colonne ou une base de données, vous ne pouvez le modifier qu'en supprimant et en recréant l'objet. Au lieu de modifier le classement par défaut d'une instance SQL Server, vous pouvez spécifier un classement pour chaque nouvelle base de données ou colonne de base de données.

    Pour demander le classement du serveur dans une instance SQL Server, utilisez la fonction Transact-SQL SERVERPROPERTY suivante :

    SELECT CONVERT (varchar, SERVERPROPERTY('collation'))
    

    Pour demander au serveur tous les classements disponibles, utilisez la fonction intégrée fn_helpcollations() suivante :

    SELECT * from ::fn_helpcollations()
    
  • Classements au niveau de la base de données
    Lorsque vous créez 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é, la base de données reçoit le classement par défaut de la base de données model. Le classement de la base de données model est identique au classement par défaut de l'instance SQL Server.

    Le classement d'une base de données utilisateur peut être modifié à l'aide une instruction ALTER DATABASE telle que la suivante :

    ALTER DATABASE myDB COLLATE Greek_CS_AI
    

    Le classement courant d'une base de données peut être extrait à l'aide d'une instruction telle que la suivante :

    SELECT CONVERT (varchar, DATABASEPROPERTYEX('database_name','collation'))
    

    [!REMARQUE]

    Le fait de changer le classement au niveau de la base de données n'a aucune incidence sur les classements au niveau des expressions et des colonnes.

  • Classements au niveau des colonnes
    Lorsque vous créez une table, vous pouvez spécifier les classements de chaque colonne de chaînes de caractères à l'aide de la clause COLLATE de l'instruction CREATE TABLE. Si aucun classement n'est spécifié, le classement par défaut de la base de données est attribué à la colonne.

    Le classement d'une colonne peut être modifié à l'aide une instruction ALTER TABLE telle que la suivante :

    ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR(10) COLLATE Greek_CS_AI
    
  • Classements au niveau de l'expression
    Les classements au niveau de l'expression sont définis lors de l'exécution d'une instruction et ils affectent la façon dont l'ensemble de résultats est retourné. Cela permet aux résultats de tri ORDER BY d'être spécifiques aux paramètres régionaux. Utilisez une clause COLLATE telle que la suivante pour implémenter les classements au niveau de l'expression :

    SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI
    

Retour en haut

Paramètres régionaux

Les paramètres régionaux sont un ensemble d'informations associées à un lieu ou à une culture. Il peut s'agir du nom et de l'identificateur de la langue parlée, du script utilisé pour écrire la langue et des conventions culturelles. Les classements peuvent être associés à un ou plusieurs ensembles de paramètres régionaux.

Retour en haut

Unicode

Si vous stockez des données de caractères de plusieurs langues, utilisez toujours les types de données Unicode (nchar, nvarchar et ntext) à la place des types de données non-Unicode (char, varchar et text).

Des limitations significatives sont associées aux types de données non-Unicode. C'est parce qu'un ordinateur non-Unicode sera restreint quant à l'utilisation d'une page de codes unique. Vous pouvez bénéficier de gains de performances en utilisant Unicode parce qu'un moins grand nombre de conversions de page de codes est requis. Les classements unicode doivent être sélectionnés individuellement au niveau de la base de données, de la colonne ou de l'expression parce qu'ils ne sont pas pris en charge au niveau serveur.

Les pages de codes qu'utilise un client sont déterminées par les paramètres de votre système d'exploitation. Pour définir les pages de codes du client sur les systèmes d'exploitation Windows 2000, Windows XP, Windows Server 2003 ou Windows Server 2008, utilisez Paramètres régionaux dans le Panneau de configuration.

Lorsque vous déplacez des données d'un serveur vers un client, votre classement du serveur peut ne pas être reconnu par les pilotes de clients plus anciens. Cela peut se produire le plus souvent lorsque vous déplacez des données d'un serveur Unicode vers un client non Unicode. La meilleure solution peut alors consister à mettre à niveau le système d'exploitation du client afin de mettre aussi à jour les classements du système sous-jacent. Si le client est équipé du logiciel client de base de données, vous pouvez envisager de lui appliquer une mise à jour du service.

Vous pouvez également essayer d'utiliser un autre classement pour les données du serveur. Choisissez un classement qui effectue un mappage à une page de codes du client. Pour plus d'informations, consultez la rubrique « Définition et modification des classements » dans la documentation en ligne de SQL Server.

Pour déterminer les problèmes qui sont liés à l'utilisation des types de données Unicode ou non-Unicode, testez votre scénario pour mesurer les écarts de performances dans votre environnement. Vous devez normaliser le classement utilisé sur les systèmes de votre organisation et déployer des serveurs et clients Unicode partout où vous le pouvez. Pour plus d'informations sur Unicode, consultez le site Web du consortium Unicode (en anglais).

Dans de nombreuses situations, SQL Server entre en interaction avec d'autres serveurs ou clients et votre organisation peut utiliser différentes normes d'accès aux données entre les applications et les instances de serveur. Les clients SQL Server sont l'un des deux types principaux :

  • Les clients Unicode qui utilisent OLE DB et ODBC (Open Database Connectivity) 3.7 ou version ultérieure.

  • Les clients non-Unicode qui utilisent DB-Library et ODBC 3.6 ou version antérieure.

Le tableau suivant présente des informations sur l'utilisation des données multilingues avec diverses combinaisons de serveurs Unicode et non-Unicode.

Serveur

Client

Avantages ou restrictions

Unicode

Unicode

Comme les données Unicode seront utilisées dans la totalité du système, ce scénario fournit les meilleures performances et la meilleure protection contre la modification des données extraites. C'est le cas avec ActiveX Data Objects (ADO), OLE DB et ODBC 3.7 ou version ultérieure.

Unicode

Non-Unicode

Dans ce scénario, et surtout avec les connexions entre un serveur exécutant un système d'exploitation récent et un client exécutant une version antérieure de SQL Server, ou un système d'exploitation plus ancien, il peut y avoir des limitations ou des erreurs lorsque vous déplacez des données vers un ordinateur client. Les données Unicode sur le serveur tenteront d'établir un mappage à une page de codes correspondante sur le client non-Unicode afin de convertir les données.

Non-Unicode

Unicode

Cette configuration n'est pas idéale pour l'utilisation de données multilingues. Vous ne pouvez pas écrire des données Unicode sur le serveur non-Unicode. Des problèmes peuvent survenir lorsque les données sont envoyées à des serveurs qui sont en dehors de la page de codes du serveur.

Non-Unicode

Non-Unicode

Cette configuration est la plus limitée pour des données multilingues. Vous pouvez utiliser uniquement une seule page de codes.

Si vous rencontrez des erreurs ou des problèmes lors du déplacement de données d'un serveur vers un client (spécifiquement, d'un serveur Unicode vers un client non-Unicode), votre classement de serveur risque de ne pas être reconnu par d'anciens pilotes clients. Dans ce cas, la meilleure solution est de mettre à niveau le système d'exploitation du client afin de mettre à jour les classements du système sous-jacent. Si le client est équipé du logiciel client de base de données, vous pouvez envisager de lui appliquer une mise à jour du service.

Vous pouvez également essayer d'utiliser un autre classement pour les données du serveur. Choisissez un classement qui établit un mappage à une page de codes du client. Pour plus d'informations sur la modification des classements, consultez la rubrique « Définition et modification des classements dans SQL Server » dans la documentation en ligne de SQL Server. Pour plus d'informations sur la modification des classements, consultez le livre blanc des « meilleures pratiques recommandées pour la modification des classements SQL Server » à l'adresse suivante. Pour plus d'informations sur la façon d'effectuer une migration de types de données non-Unicode vers Unicode, consultez le livre blanc des « meilleures pratiques recommandées SQL Server pour migrer vers Unicode à l'adresse suivante.

Rubriques connexes :Unicode : concepts de base

Retour en haut

Page de codes

Une page de codes est le jeu de caractères ordonné d'un script donné dans lequel un index numérique (ou une valeur de point de code) est associé à chaque caractère. Une page de codes Windows est généralement appelée jeu de caractères ou charset. Les pages de codes permettent d'assurer la prise en charge des jeux de caractères et des dispositions du clavier utilisés par différents paramètres régionaux système Windows.

Tous les classements Unicode Windows Server 2008 sont basés sur Unicode 5.0.

Retour en haut

Types de données

Un type de données est une définition qui spécifie une plage de valeurs, les opérations qui peuvent être effectuées sur ces valeurs et la façon dont les valeurs sont stockées dans la mémoire de l'ordinateur. Définir des types de données permet à SQL Server de manipuler les données de manière prévisible. Les types de données de caractères non-Unicode sont char, varchar et text. Les types de données Unicode sont nchar, nvarchar et ntext. Nous vous recommandons d'utiliser les types de données Unicode dans vos applications, notamment si vous stockez des données de caractères de plusieurs langues.

Pour plus d'informations sur la façon d'effectuer une migration de types de données non-Unicode vers Unicode, consultez le livre blanc des « meilleures pratiques recommandées SQL Server pour migrer vers Unicode à l'adresse suivante.

Rubriques connexes :Types de données (Moteur de base de données), Types de données (Transact-SQL), Types de données d'Integration Services

Retour en haut

Ordre de tri

L'ordre de tri spécifie comment sont triées les valeurs de données. Cela affecte les résultats de comparaison de données. Les données sont triées en utilisant les classements et peuvent être optimisées à l'aide des index.

Rubriques connexes :Styles de tri des classements Windows, Index

Retour en haut