Prise en charge d’Unicode et du classementCollation and Unicode Support

Les classements dans SQL ServerSQL Server fournissent les règles de tri et les propriétés de respect de la casse et des accents pour vos données.Collations in SQL ServerSQL Server provide sorting rules, case, and accent sensitivity properties for your data. 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.Collations that are used with character data types such as char and varchar dictate the code page and corresponding characters that can be represented for that data type. Qu’il s’agisse d’installer une nouvelle instance de SQL ServerSQL Server, de restaurer une sauvegarde de base de données ou de connecter un serveur à des bases de données clientes, vous devez bien comprendre les exigences en termes de paramètres régionaux, d’ordre de tri et de respect de la casse et des accents des données que vous utilisez.Whether you are installing a new instance of SQL ServerSQL Server, restoring a database backup, or connecting server to client databases, it is important that you understand the locale requirements, sorting order, and case and accent sensitivity of the data that you are working with. Pour répertorier les classements disponibles sur votre instance de SQL ServerSQL Server, consultez sys.fn_helpcollations (Transact-SQL).To list the collations available on your instance of SQL ServerSQL Server, see sys.fn_helpcollations (Transact-SQL).

Quand vous sélectionnez un classement pour votre serveur, base de données, colonne ou expression, vous assignez certaines caractéristiques à vos données qui affectent les résultats de nombreuses opérations dans la base de données.When you select a collation for your server, database, column, or expression, you are assigning certain characteristics to your data that affects the results of many operations in the database. 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.For example, when you construct a query by using ORDER BY, the sort order of your result set might depend on the collation that is applied to the database or dictated in a COLLATE clause at the expression level of the query.

Pour exploiter au mieux la prise en charge des classements dans SQL ServerSQL 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.To best use collation support in SQL ServerSQL Server, you must understand the terms that are defined in this topic, and how they relate to the characteristics of your data.

Termes de classement Collation Terms

Classement Collation

Un classement désigne les modèles binaires qui représentent chaque caractère dans un jeu de données.A collation specifies the bit patterns that represent each character in a data set. Les classements déterminent également les règles de tri et de comparaison des données.Collations also determine the rules that sort and compare data. SQL ServerSQL Server prend en charge le stockage d’objets ayant des classements différents dans une même base de données. supports storing objects that have different collations in a single database. 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.For non-Unicode columns, the collation setting specifies the code page for the data and which characters can be represented. 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.Data that is moved between non-Unicode columns must be converted from the source code page to the destination code page.

Le résultat d'une instruction Transact-SQLTransact-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. Transact-SQLTransact-SQL statement results can vary when the statement is run in the context of different databases that have different collation settings. Dans la mesure du possible, choisissez un classement normalisé pour votre organisation.If it is possible, use a standardized collation for your organization. De cette manière, vous n'avez pas à spécifier explicitement le classement dans chaque caractère ou expression Unicode.This way, you do not have to explicitly specify the collation in every character or Unicode expression. 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.If you must work with objects that have different collation and code page settings, code your queries to consider the rules of collation precedence. Pour plus d’informations, consultez Priorité de classement (Transact-SQL).For more information, see Collation Precedence (Transact-SQL).

Les options associées à un classement sont le respect de la casse, le respect des accents, le respect du jeu de caractères Kana, le respect de la largeur et le respect du sélecteur de variante.The options associated with a collation are case sensitivity, accent sensitivity, Kana-sensitivity, width sensitivity, variation-selector-sensitivity. Pour spécifier ces options, vous devez les ajouter au nom du classement.These options are specified by appending them to the collation name. Par exemple, le classement Japanese_Bushu_Kakusu_100_CS_AS_KS_WS respecte la casse, les accents, le jeu de caractères Kana et la largeur.For example, this collation Japanese_Bushu_Kakusu_100_CS_AS_KS_WS is case-sensitive, accent-sensitive, Kana-sensitive, and width-sensitive. Autre exemple : le classement Japanese_Bushu_Kakusu_140_CI_AI_KS_WS_VSS ne respecte pas la casse, ne respecte pas les accents, respecte le jeu de caractères Kana, respecte la largeur et respecte le sélecteur de variante.As another example, this collation Japanese_Bushu_Kakusu_140_CI_AI_KS_WS_VSS is case-insensitive, accent-insensitive, Kana-sensitive, width-sensitive, and variation-selector-sensitive. Le tableau suivant décrit le comportement associé à ces différentes options.The following table describes the behavior associated with these various options.

OptionOption DescriptionDescription
Respecter la casse (_CS)Case-sensitive (_CS) Fait la distinction entre les majuscules et les minuscules.Distinguishes between uppercase and lowercase letters. Si cette option est activée, les minuscules sont triées avant leurs équivalents majuscules.If selected, lowercase letters sort ahead of their uppercase versions. Si cette option n’est pas sélectionnée, le classement ne respecte pas la casse.If this option is not selected, the collation is case-insensitive. Dans ce cas, SQL Server considère que les versions en majuscules et en minuscules des lettres sont identiques dans les opérations de tri.That is, SQL Server considers the uppercase and lowercase versions of letters to be identical for sorting purposes. Vous pouvez explicitement sélectionner le non-respect de la casse en spécifiant _CI.You can explicitly select case insensitivity by specifying _CI.
Respecter les accents (_AS)Accent-sensitive (_AS) Fait la distinction entre les caractères accentués et non accentués.Distinguishes between accented and unaccented characters. Par exemple, « a » n'est pas équivalent à « ấ ».For example, 'a' is not equal to 'ấ'. Si cette option n’est pas sélectionnée, le classement ne respecte pas les accents.If this option is not selected, the collation is accent-insensitive. Dans ce cas, SQL Server considère que les versions accentuées et non accentuées des lettres sont identiques dans les opérations de tri.That is, SQL Server considers the accented and unaccented versions of letters to be identical for sorting purposes. Vous pouvez explicitement sélectionner le non-respect des accents en spécifiant _AI.You can explicitly select accent insensitivity by specifying _AI.
Respecter le jeu de caractères Kana (_KS)Kana-sensitive (_KS) Fait la distinction entre les deux types de caractères japonais Kana : Hiragana et Katakana.Distinguishes between the two types of Japanese kana characters: Hiragana and Katakana. Si cette option n'est pas sélectionnée, le classement ne respecte pas les caractères Kana.If this option is not selected, the collation is Kana-insensitive. Dans ce cas, SQL Server considère que les caractères Hiragana et Katakana sont identiques dans les opérations de tri.That is, SQL Server considers Hiragana and Katakana characters to be equal for sorting purposes. L'omission de cette option est le seul moyen de spécifier le non-respect du jeu de caractères Kana.Omitting this option is the only method of specifying Kana-insensitivity.
Respecter la largeur (_WS)Width-sensitive (_WS) Fait la différence entre les caractères pleine largeur et demi-largeur.Distinguishes between full-width and half-width characters. Si cette option n'est pas sélectionnée, SQL Server considère que la représentation pleine largeur et demi-largeur d'un même caractère sont identiques dans les opérations de tri.If this option is not selected, SQL Server considers the full-width and half-width representation of the same character to be identical for sorting purposes. L'omission de cette option est le seul moyen de spécifier le non-respect de la largeur.Omitting this option is the only method of specifying width-insensitivity.
Respecter le sélecteur de variante (_VSS)Variation-selector-sensitive (_VSS) Fait la distinction entre différents sélecteurs de variante idéographiques dans les classements japonais Japanese_Bushu_Kakusu_140 et Japanese_XJIS_140 introduits dans SQL Server 2017SQL Server 2017.Distinguishes between various ideographic variation selectors in Japanese collations Japanese_Bushu_Kakusu_140 and Japanese_XJIS_140 first introduced in SQL Server 2017SQL Server 2017. Une séquence de variantes se compose d’un caractère de base et d’un sélecteur de variante supplémentaire.A variation sequence consists of a base character plus an additional variation selector. Si cette option _VSS n’est pas sélectionnée, le classement ne respecte pas le sélecteur de variante, et celui-ci n’est pas pris en compte dans la comparaison.If this _VSS option is not selected, the collation is variation selector insensitive, and the variation selector is not considered in the comparison. Autrement dit, SQL Server considère comme identiques (à des fins de tri) les caractères basés sur le même caractère de base avec différents sélecteurs de variante.That is, SQL Server considers characters built upon the same base character with differing variation selectors to be identical for sorting purposes. Voir aussi Unicode Ideographic Variation Database (Base de données de variantes idéographiques Unicode).See also Unicode Ideographic Variation Database.

Les classements qui respectent le sélecteur de variante (_VSS) ne sont pas pris en charge dans les index de recherche en texte intégral.Variation selector sensitive (_VSS) collations are not supported in Full-text search indexes. Les index de recherche en texte intégral prennent uniquement en charge les options Respecter les accents (_AS), Respecter le jeu de caractères Kana (_KS) et Respecter la largeur (_WS).Full-text search indexes support only Accent-Sensitive (_AS), Kana-sensitive (_KS), and Width-sensitive (_WS) options. Les moteurs XML et CLR de SQL Server ne prennent pas en charge les sélecteurs de variante (_VSS).SQL Server XML and CLR engines do not support (_VSS) Variation selectors.

SQL ServerSQL Server prend en charge les ensembles de classement suivants : supports the following collation sets:

classements WindowsWindows collations
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.Windows collations define rules for storing character data that are based on an associated Windows system locale. 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.For a Windows collation, comparison of non-Unicode data is implemented by using the same algorithm as Unicode data. 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.The base Windows collation rules specify which alphabet or language is used when dictionary sorting is applied, and the code page that is used to store non-Unicode character data. Les tris Unicode et non-Unicode sont compatibles avec les comparaisons de chaînes dans une version particulière de Windows.Both Unicode and non-Unicode sorting are compatible with string comparisons in a particular version of Windows. Les types de données sont ainsi cohérents dans SQL ServerSQL 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 ServerSQL Server.This provides consistency across data types within SQL ServerSQL Server, and it also lets developers sort strings in their applications by using the same rules that are used by SQL ServerSQL Server. Pour plus d’informations, consultez Nom de classement Windows (Transact-SQL).For more information, see Windows Collation Name (Transact-SQL).

Classements binairesBinary collations
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.Binary collations sort data based on the sequence of coded values that are defined by the locale and data type. Ils respectent la casse.They are case sensitive. Un classement binaire dans SQL ServerSQL Server définit les paramètres régionaux et la page de codes ANSI à utiliser.A binary collation in SQL ServerSQL Server defines the locale and the ANSI code page that is used. Cela applique un ordre de tri binaire.This enforces a binary sort order. Parce qu'ils sont relativement simples, les classements binaires aident à améliorer les performances de l'application.Because they are relatively simple, binary collations help improve application performance. 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.For non-Unicode data types, data comparisons are based on the code points that are defined in the ANSI code page. Pour les données de type Unicode, les comparaisons de données se basent sur les points de code Unicode.For Unicode data types, data comparisons are based on the Unicode code points. 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.For binary collations on Unicode data types, the locale is not considered in data sorts. 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.For example, Latin_1_General_BIN and Japanese_BIN yield identical sorting results when they are used on Unicode data.

Il existe deux types de classements binaires dans SQL ServerSQL Server. Les anciens classements BIN et les nouveaux classements BIN2 .There are two types of binary collations in SQL ServerSQL Server; the older BIN collations and the newer BIN2 collations. Dans un classement BIN2 tous les caractères sont triés en fonction de leurs points de code.In a BIN2 collation all characters are sorted according to their code points. Dans un classement BIN seul le premier caractère est trié selon le point de code, et les autres caractères sont triés en fonction de leurs valeurs d'octet.In a BIN collation only the first character is sorted according to the code point, and remaining characters are sorted according to their byte values. (En raison de l'architecture little endian de la plateforme Intel, les caractères de code Unicode sont toujours triés inversés par octet.)(Because the Intel platform is a little endian architecture, Unicode code characters are always stored byte-swapped.)

classements SQL ServerSQL Server collations
Les classements (SQL_) SQL ServerSQL Server fournissent la compatibilité d'ordre de tri avec les versions antérieures de SQL ServerSQL Server. SQL ServerSQL Server collations (SQL_) provide sort order compatibility with earlier versions of SQL ServerSQL 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.The dictionary sorting rules for non-Unicode data are incompatible with any sorting routine that is provided by Windows operating systems. Toutefois, le tri de données Unicode est compatible avec une version particulière de règles de tri Windows.However, sorting Unicode data is compatible with a particular version of Windows sorting rules. Comme les classements SQL ServerSQL 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 des mêmes données, selon le type de données sous-jacent.Because SQL ServerSQL Server collations use different comparison rules for non-Unicode and Unicode data, you see different results for comparisons of the same data, depending on the underlying data type. Pour plus d’informations, consultez Nom du classement SQL Server (Transact-SQL).For more information, see SQL Server Collation Name (Transact-SQL).

Note

Lorsque vous mettez à niveau une instance anglaise SQL ServerSQL Server, vous pouvez spécifier les classements (SQL_) SQL ServerSQL Server pour permettre la compatibilité avec les instances SQL ServerSQL Server existantes.When you upgrade an English-language instance of SQL ServerSQL Server, SQL ServerSQL Server collations (SQL_) can be specified for compatibility with existing instances of SQL ServerSQL Server. Le classement par défaut d'une instance SQL ServerSQL Server étant défini au cours de la procédure d'installation, assurez-vous de spécifier soigneusement les paramètres de classement dans les cas suivants :Because the default collation for an instance of SQL ServerSQL Server is defined during setup, make sure that you specify collation settings carefully when the following are true:

  • Votre code d'application dépend du comportement des classements SQL ServerSQL Server précédents.Your application code depends on the behavior of previous SQL ServerSQL Server collations.
    • Vous devez stocker des données de caractères de plusieurs langues.You must store character data that reflects multiple languages.

Les paramétrages des classements sont pris en charge aux niveaux suivants d'une instance SQL ServerSQL Server:Setting collations are supported at the following levels of an instance of SQL ServerSQL Server:

Classements au niveau du serveurServer-level collations
Le classement du serveur par défaut est défini durant l'installation de SQL ServerSQL Server , et devient également le classement par défaut des bases de données système et de toutes les bases de données utilisateur.The default server collation is set during SQL ServerSQL Server setup, and also becomes the default collation of the system databases and all user databases. Notez que les classements Unicode ne peuvent pas être sélectionnés pendant la procédure d'installation de SQL ServerSQL Server , car ils ne sont pas pris en charge en tant que classements au niveau du serveur.Note that Unicode-only collations cannot be selected during SQL ServerSQL Server setup because they are not supported as server-level collations.

Lorsqu'un classement a été affecté au serveur, vous ne pouvez pas le modifier le classement, à moins d'exporter la totalité des objets et des données de la base de données, de reconstruire la base de données master et d'importer la totalité des objets et des données de la base de données.After a collation has been assigned to the server, you cannot change the collation except by exporting all database objects and data, rebuilding the master database, and importing all database objects and data. Au lieu de modifier le classement par défaut d'une instance SQL ServerSQL Server, vous pouvez spécifier le classement désiré au moment de la création d'une nouvelle base de données ou colonne de base de données.Instead of changing the default collation of an instance of SQL ServerSQL Server, you can specify the desired collation at the time that you create a new database or database column.

Classements au niveau de la base de donnéesDatabase-level collations
Lorsque vous créez ou modifiez une base de données, vous pouvez utiliser la clause COLLATE de l'instruction CREATE DATABASE ou ALTER DATABASE pour spécifier le classement par défaut de la base de données.When a database is created or modified, you can use the COLLATE clause of the CREATE DATABASE or ALTER DATABASE statement to specify the default database collation. Si aucun classement n'est spécifié, le classement du serveur est affecté à la base de données.If no collation is specified, the database is assigned the server collation.

Vous ne pouvez pas modifier le classement des bases de données système, à moins de modifier le classement du serveur.You cannot change the collation of system databases except by changing the collation for the server.

Le classement de la base de données est utilisé pour toutes les métadonnées de la base de données. Il constitue le classement par défaut pour l'ensemble des colonnes de chaîne, des objets temporaires, des noms de variable et des autres chaînes utilisées dans la base de données.The database collation is used for all metadata in the database, and is the default for all string columns, temporary objects, variable names, and any other strings used in the database. Quand vous modifiez le classement d'une base de données utilisateur, des conflits de classement risquent de se produire quand des requêtes de la base de données accèdent à des tables temporaires.When you change the collation of a user database, there can be collation conflicts when queries in the database access temporary tables. Les tables temporaires sont toujours stockées dans la base de données système tempdb, qui utilise le classement de l’instance.Temporary tables are always stored in the tempdb system database, which uses the collation for the instance. Les requêtes qui comparent les données caractères entre la base de données utilisateur et tempdb risquent d'échouer si les classements génèrent un conflit lors de l'évaluation des données caractères.Queries that compare character data between the user database and tempdb may fail if the collations cause a conflict in evaluating the character data. Vous pouvez résoudre ce problème en spécifiant la clause COLLATE dans la requête.You can resolve this by specifying the COLLATE clause in the query. Pour plus d’informations, consultez COLLATE (Transact-SQL).For more information, see COLLATE (Transact-SQL).

Classements au niveau des colonnesColumn-level collations
Lorsque vous créez ou modifiez une table, vous pouvez spécifier des classements pour chaque colonne de chaîne de caractères à l'aide de la clause COLLATE.When you create or alter a table, you can specify collations for each character-string column by using the COLLATE clause. Si aucun classement n'est spécifié, le classement par défaut de la base de données est attribué à la colonne.If no collation is specified, the column is assigned the default collation of the database.

Classements au niveau de l'expressionExpression-level collations
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é.Expression-level collations are set when a statement is run, and they affect the way a result set is returned. Cela permet aux résultats de tri ORDER BY d'être spécifiques aux paramètres régionaux.This enables ORDER BY sort results to be locale-specific. Utilisez une clause COLLATE telle que la suivante pour implémenter les classements au niveau de l'expression :Use a COLLATE clause such as the following to implement expression-level collations:

SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI;    

Paramètres régionaux Locale

Les paramètres régionaux sont un ensemble d'informations associées à un emplacement ou à une culture.A locale is a set of information that is associated with a location or a 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.This can include the name and identifier of the spoken language, the script that is used to write the language, and cultural conventions. Les classements peuvent être associés à un ou plusieurs ensembles de paramètres régionaux.Collations can be associated with one or more locales. Pour plus d'informations, consultez Locale IDs Assigned by Microsoft (en anglais).For more information, see Locale IDs Assigned by Microsoft.

Code Page Code Page

Une page de codes est le jeu ordonné de caractères d'un script donné dans lequel un index numérique (ou une valeur de point de code) est associé à chaque caractère.A code page is an ordered set of characters of a given script in which a numeric index, or code point value, is associated with each character. Une page de codes Windows est généralement appelée jeu de caractères ou charset.A Windows code page is typically referred to as a character set or 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.Code pages are used to provide support for the character sets and keyboard layouts that are used by different Windows system locales.

Sort Order Sort Order

L'ordre de tri spécifie comment sont triées les valeurs de données.Sort order specifies how data values are sorted. Cela affecte les résultats de comparaison de données.This affects the results of data comparison. Les données sont triées en utilisant les classements et peuvent être optimisées à l'aide des index.Data is sorted by using collations, and it can be optimized by using indexes.

Prise en charge d’Unicode Unicode Support

Unicode est un standard en matière de correspondance de points de code avec des caractères.Unicode is a standard for mapping code points to characters. Comme il est conçu pour couvrir tous les caractères de toutes les langues du monde, il n'y a pas besoin de pages de codes différentes pour gérer des jeux de caractères différents.Because it is designed to cover all the characters of all the languages of the world, there is no need for different code pages to handle different sets of characters. Si vous stockez des données de caractères de plusieurs langues, utilisez toujours les types de données Unicode (nchar, nvarcharet ntext) à la place des types de données non-Unicode (char, varcharet text).If you store character data that reflects multiple languages, always use Unicode data types (nchar, nvarchar, and ntext) instead of the non-Unicode data types (char, varchar, and text).

Des limitations significatives sont associées aux types de données non-Unicode.Significant limitations are associated with non-Unicode data types. C’est parce qu’un ordinateur non-Unicode ne peut utiliser qu’une seule page de codes.This is because a non-Unicode computer is limited to use of a single code page. 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.You might experience performance gain by using Unicode because fewer code-page conversions are required. 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 du serveur.Unicode collations must be selected individually at the database, column, or expression level because they are not supported at the server level.

Les pages de codes qu'utilise un client sont déterminées par les paramètres du système d'exploitation.The code pages that a client uses are determined by the operating system settings. Pour définir les pages de codes du client sur le système d'exploitation Windows, utilisez Paramètres régionaux dans le Panneau de configuration.To set client code pages on the Windows operating system, use Regional Settings in Control Panel.

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.When you move data from a server to a client, your server collation might not be recognized by older client drivers. Cela peut se produire lorsque vous déplacez des données d'un serveur Unicode vers un client non-Unicode.This can occur when you move data from a Unicode server to a non-Unicode client. 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.Your best option might be to upgrade the client operating system so that the underlying system collations are updated. Si le client est équipé du logiciel client de base de données, vous pouvez envisager de lui appliquer une mise à jour du service.If the client has database client software installed, you might consider applying a service update to the database client software.

Vous pouvez également essayer d'utiliser un autre classement pour les données du serveur.You can also try to use a different collation for the data on the server. Choisissez un classement qui établit un mappage à une page de codes du client.Choose a collation that maps to a code page on the client.

Pour utiliser les classements UTF-16 disponibles dans SQL Server 2017SQL Server 2017, sélectionnez l'un des classements _SC de caractères supplémentaires (classements Windows uniquement) afin d'améliorer la recherche et le tri de certains caractères Unicode.To use the UTF-16 collations available in SQL Server 2017SQL Server 2017, you can select one of the supplementary characters _SC collations (Windows collations only) to improve searching and sorting of some Unicode characters.

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.To evaluate issues that are related to using Unicode or non-Unicode data types, test your scenario to measure performance differences in your environment. 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.It is a good practice to standardize the collation that is used on systems across your organization, and deploy Unicode servers and clients wherever possible.

Dans de nombreuses situations, SQL ServerSQL Server interagit avec d’autres serveurs ou clients, et votre organisation peut utiliser plusieurs normes d’accès aux données entre les applications et les instances de serveur.In many situations, SQL ServerSQL Server interacts with other servers or clients, and your organization might use multiple data access standards between applications and server instances. Les clients SQL ServerSQL Server sont l'un des deux types principaux : SQL ServerSQL Server clients are one of two main types:

  • Lesclients Unicode qui utilisent OLE DB et ODBC (Open Database Connectivity) 3.7 ou version ultérieure.Unicode clients that use OLE DB and Open Database Connectivity (ODBC) version 3.7 or a later version.

  • Lesclients non-Unicode qui utilisent DB-Library et ODBC 3.6 ou version antérieure.Non-Unicode clients that use DB-Library and ODBC version 3.6 or an earlier version.

    Le tableau suivant présente des informations sur l'utilisation des données multilingues avec diverses combinaisons de serveurs Unicode et non-Unicode.The following table provides information about using multilingual data with various combinations of Unicode and non-Unicode servers.

ServerServer ClientClient Avantages ou restrictionsBenefits or Limitations
UnicodeUnicode UnicodeUnicode Comme les données Unicode sont utilisées dans tout le système, ce scénario fournit les meilleures performances et la meilleure protection contre l’altération des données récupérées.Because Unicode data is used throughout the system, this scenario provides the best performance and protection from corruption of retrieved data. C’est le cas avec ActiveX Data Objects (ADO), OLE DB et ODBC 3.7 ou version ultérieure.This is the situation with ActiveX Data Objects (ADO), OLE DB, and ODBC version 3.7 or a later version.
UnicodeUnicode Non-UnicodeNon-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 ServerSQL 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.In this scenario, especially with connections between a server that is running a newer operating system and a client that is running an older version of SQL ServerSQL Server, or on an older operating system, there can be limitations or errors when you move data to a client computer. Les données Unicode sur le serveur tentent d’établir un mappage à une page de codes correspondante sur le client non-Unicode afin de convertir les données.Unicode data on the server tries to map to a corresponding code page on the non-Unicode client to convert the data.
Non-UnicodeNon-Unicode UnicodeUnicode Cette configuration n'est pas idéale pour l'utilisation de données multilingues.This is not an ideal configuration for using multilingual data. Vous ne pouvez pas écrire des données Unicode sur le serveur non-Unicode.You cannot write Unicode data to the non-Unicode server. 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.Problems are likely to occur when data is sent to servers that are outside the server's code page.
Non-UnicodeNon-Unicode Non-UnicodeNon-Unicode Cette configuration est la plus limitée pour des données multilingues.This is a very limiting scenario for multilingual data. Vous pouvez utiliser uniquement une seule page de codes.You can use only a single code page.

Caractères supplémentaires Supplementary Characters

SQL ServerSQL Server fournit des types de données tels que nchar et nvarchar pour stocker des données Unicode. provides data types such as nchar and nvarchar to store Unicode data. Ces types de données encodent le texte dans un format appelé UTF-16.These data types encode text in a format called UTF-16. Le Consortium Unicode alloue à chaque caractère un codepoint unique, qui est une valeur comprise entre 0x0000 et 0x10FFFF.The Unicode Consortium allocates each character a unique codepoint, which is a value in the range 0x0000 to 0x10FFFF. Les caractères utilisés le plus souvent ont des valeurs codepoint qui correspondent à un mot de 16 bits en mémoire et sur le disque, mais les caractères dont les valeurs codepoint sont supérieures à 0xFFFF nécessitent deux mots de 16 bits consécutifs.The most frequently used characters have codepoint values that fit into a 16-bit word in memory and on disk, but characters with codepoint values larger than 0xFFFF require two consecutive 16-bit words. Ces caractères sont appelés des caractères supplémentaireset les deux mots de 16 bits consécutifs sont appelés des paires de substitution.These characters are called supplementary characters, and the two consecutive 16-bit words are called surrogate pairs.

Si vous utilisez des caractères supplémentaires :If you use supplementary characters:

  • Les caractères supplémentaires peuvent être utilisés dans des opérations de tri et de comparaison dans les versions de classement 90 ou versions supérieures.Supplementary characters can be used in ordering and comparison operations in collation versions 90 or greater.

  • Tous les nouveaux classements de niveau _100 prennent en charge le tri linguistique avec les caractères supplémentaires.All _100 level collations support linguistic sorting with supplementary characters.

  • Les caractères supplémentaires ne sont pas utilisables dans les métadonnées, telles que les noms d'objets de base de données.Supplementary characters are not supported for use in metadata, such as in names of database objects.

  • À compter de SQL Server 2012SQL Server 2012, vous pouvez utiliser une nouvelle famille de classements de caractères supplémentaires (SC) avec les types de données nchar, nvarchar et sql_variant.Introduced in SQL Server 2012SQL Server 2012, a new family of supplementary character (SC) collations can be used with the data types nchar, nvarchar, and sql_variant. Par exemple : Latin1_General_100_CI_AS_SC ou si vous utilisez un classement japonais, Japanese_Bushu_Kakusu_100_CI_AS_SC.For example: Latin1_General_100_CI_AS_SC, or if using a Japanese collation, Japanese_Bushu_Kakusu_100_CI_AS_SC.

    Note

    Les bases de données qui utilisent des classements avec des caractères supplémentaires (_SC) ne peuvent pas être activées pour la réplication SQL ServerSQL Server.Databases that use collations with supplementary characters (_SC), cannot be enabled for SQL ServerSQL Server Replication. C’est parce que certaines des tables système et des procédures stockées créées pour la réplication utilisent le type de données ntext hérité qui ne prend pas en charge les caractères supplémentaires.This is because some of the system tables and stored procedures that are created for replication, use the legacy ntext data type, which does not support supplementary characters.

    L’indicateur SC peut s’appliquer aux éléments suivants :The SC flag can be applied to:

    • Classements Windows version 90Version 90 Windows collations

    • Classements Windows version 100Version 100 Windows collations

      L’indicateur SC ne peut pas s’appliquer aux éléments suivants :The SC flag cannot be applied to:

    • Classements Windows version 80 et sans versionVersion 80 non-versioned Windows collations

    • Classements binaires BIN ou BIN2The BIN or BIN2 binary collations

    • Classements SQLThe SQL collations

    Le tableau suivant compare le comportement de quelques fonctions de chaîne et opérateurs d'enchaînement lorsqu'ils utilisent des caractères supplémentaires avec et sans classement SC.The following table compares the behavior of some string functions and string operators when they use supplementary characters with and without a SC collation.

Fonction de chaîne ou opérateurString Function or Operator Avec un classement SCWith an SC Collation Sans classement SCWithout an SC Collation
CHARINDEXCHARINDEX

LENLEN

PATINDEXPATINDEX
La paire de substitution UTF-16 est comptée comme un codepoint unique.The UTF-16 surrogate pair is counted as a single codepoint. La paire de substitution UTF-16 est comptée comme deux codepoints.The UTF-16 surrogate pair is counted as two codepoints.
LEFTLEFT

REPLACEREPLACE

REVERSEREVERSE

RIGHTRIGHT

SUBSTRINGSUBSTRING

STUFFSTUFF
Ces fonctions traitent chaque paire de substitution comme un codepoint unique et fonctionnent comme attendu.These functions treat each surrogate pair as a single codepoint and work as expected. Ces fonctions peuvent fractionner toutes les paires de substitution et conduire à des résultats inattendus.These functions may split any surrogate pairs and lead to unexpected results.
NCHARNCHAR Retourne le caractère qui correspond à la valeur de codepoint Unicode spécifiée dans la plage 0 à 0x10FFFF.Returns the character corresponding to the specified Unicode codepoint value in the range 0 to 0x10FFFF. Si la valeur spécifiée se trouve dans la plage 0 à 0xFFFF, un seul caractère est retourné.If the value specified lies in the range 0 through 0xFFFF, one character is returned. Pour les valeurs plus élevées, la paire de substitution correspondante est retournée.For higher values, the corresponding surrogate is returned. Une valeur supérieure à 0xFFFF retourne NULL au lieu du substitut correspondant.A value higher than 0xFFFF returns NULL instead of the corresponding surrogate.
UNICODEUNICODE Retourne un codepoint UTF-16 dans la plage 0 à 0x10FFFF.Returns a UTF-16 codepoint in the range 0 through 0x10FFFF. Retourne un codepoint UCS-2 dans la plage 0 à 0xFFFF.Returns a UCS-2 codepoint in the range 0 through 0xFFFF.
Recherche de correspondance d’un seul caractère génériqueMatch One Character Wildcard

Caractère générique - Caractères à ne pas faire correspondreWildcard - Character(s) Not to Match
Les caractères supplémentaires sont pris en charge pour toutes les opérations génériques.Supplementary characters are supported for all wildcard operations. Les caractères supplémentaires ne sont pas pris en charge pour ces opérations génériques.Supplementary characters are not supported for these wildcard operations. D'autres opérateurs génériques sont pris en charge.Other wildcard operators are supported.

Prise en charge du langage GB18030 GB18030 Support

GB18030 est une norme distincte utilisée en République populaire de Chine pour l'encodage des caractères chinois.GB18030 is a separate standard used in the People's Republic of China for encoding Chinese characters. Dans la norme GB18030, les caractères peuvent être encodés sur 1, 2 ou 4 octets de longueur.In GB18030, characters can be 1, 2, or 4 bytes in length. Pour prendre en charge les caractères encodés selon la norme GB18030, SQL ServerSQL Server les reconnaît lorsqu'ils entrent dans le serveur en provenance d'une application côté client, puis les convertit et les stocke en mode natif en tant que caractères Unicode. SQL ServerSQL Server provides support for GB18030-encoded characters by recognizing them when they enter the server from a client-side application and converting and storing them natively as Unicode characters. Une fois stockés dans le serveur, ils sont traités en tant que caractères Unicode dans toutes les opérations suivantes.After they are stored in the server, they are treated as Unicode characters in any subsequent operations. Vous pouvez utiliser n'importe quel classement chinois, de préférence la version 100 la plus récente.You can use any Chinese collation, preferably the latest 100 version. Tous les classements de niveau _100 prennent en charge le tri linguistique avec les caractères GB18030.All _100 level collations support linguistic sorting with GB18030 characters. Si les données incluent des caractères supplémentaires (paires de substitution), vous pouvez utiliser les classements SC disponibles dans SQL Server 2017SQL Server 2017 pour améliorer la recherche et le tri.If the data includes supplementary characters (surrogate pairs), you can use the SC collations available in SQL Server 2017SQL Server 2017 to improve searching and sorting.

Prise en charge des scripts complexes Complex Script Support

SQL ServerSQL Server peut prendre en charge l'entrée, le stockage, la modification et l'affichage de scripts complexes. can support inputting, storing, changing, and displaying complex scripts. Les scripts complexes sont notamment les suivants :Complex scripts include the following types:

  • Scripts qui associent l'utilisation de textes écrits de droite à gauche et de gauche à droite, par exemple les textes écrits en arabe et en anglais.Scripts that include the combination of both right-to-left and left-to-right text, such as a combination of Arabic and English text.
  • Scripts dont les caractères changent de forme en fonction de leur position ou lorsqu'ils sont associés à d'autres caractères, par exemple les caractères arabes, indiens et thaï.Scripts whose characters change shape depending on their position, or when combined with other characters, such as Arabic, Indic, and Thai characters.
  • Les langues telles que le thaï nécessitent des dictionnaires internes pour la reconnaissance des mots, car ces derniers ne sont pas séparés.Languages such as Thai that require internal dictionaries to recognize words because there are no breaks between them.

Les applications de base de données qui interagissent avec SQL ServerSQL Server doivent utiliser des contrôles qui prennent en charge les scripts complexes.Database applications that interact with SQL ServerSQL Server must use controls that support complex scripts. Les contrôles Windows Form standard créés dans du code managé peuvent prendre en charge les scripts complexes.Standard Windows form controls that are created in managed code are complex script-enabled.

Classements japonais ajoutés dans SQL Server 2017SQL Server 2017 Japanese Collations added in SQL Server 2017SQL Server 2017

À compter de SQL Server 2017SQL Server 2017, deux nouvelles familles de classement japonais sont prises en charge, avec les permutations de diverses options (_CS, _AS, _KS, _WS, _VSS, etc).Starting in SQL Server 2017SQL Server 2017, two new Japanese collation families are supported, with the permutations of various options (_CS, _AS, _KS, _WS, _VSS, etc.).

Pour répertorier ces classements, vous pouvez interroger le moteur de base de données SQL Server :To list these collations, you may query the SQL Server Database Engine:

SELECT Name, Description FROM fn_helpcollations()  
WHERE Name LIKE 'Japanese_Bushu_Kakusu_140%' OR Name LIKE 'Japanese_XJIS_140%'

Ces classements sont pris en charge dans les index de moteur de base de données, les tables optimisées en mémoire, les index columnstore et les modules compilés en mode natif.These collations are supported in Database Engine indexes, memory-optimized tables, columnstore indexes, and natively compiled modules.

TâcheTask RubriqueTopic
Explique comment définir ou modifier le classement de l'instance de SQL Server.Describes how to set or change the collation of the instance of SQL Server. Définir ou modifier le classement du serveurSet or Change the Server Collation
Explique comment définir ou modifier le classement d'une base de données utilisateur.Describes how to set or change the collation of a user database. Définir ou modifier le classement de la base de donnéesSet or Change the Database Collation
Explique comment définir ou modifier le classement d'une colonne dans la base de données.Describes how to set or change the collation of a column in the database. Définir ou modifier le classement des colonnesSet or Change the Column Collation
Explique comment retourner des informations de classement au niveau du serveur, de la base de données ou de la colonne.Describes how to return collation information at the server, database, or column level. Afficher des informations de classementView Collation Information
Décrit comment écrire des instructions Transact-SQL qui sont plus portables d’un langage à un autre ou qui prennent en charge plusieurs langages plus facilement.Describes how to write Transact-SQL statements that are more portable from one language to another, or support multiple languages more easily. Rédiger des instructions Transact-SQL internationalesWrite International Transact-SQL Statements
Explique comment modifier la langue des messages d'erreur et des paramètres relatifs à l'utilisation et l'affichage de la date, de l'heure et des devises.Describes how to change the language of error messages and preferences for how date, time, and currency data are used and displayed. Définir une langue de sessionSet a Session Language

SQL Server Best Practices Collation Change (Bonnes pratiques relatives au changement de classement dans SQL Server)SQL Server Best Practices Collation Change

SQL Server Best Practices Migration to Unicode (Bonnes pratiques relatives à la migration vers Unicode dans SQL Server)"SQL Server Best Practices Migration to Unicode"

Site web du consortium UnicodeUnicode Consortium Web site

Voir aussiSee Also

Classements de base de données à relation contenant-contenu Contained Database Collations
Choisir une langue lors de la création d’un index de recherche en texte intégral Choose a Language When Creating a Full-Text Index
sys.fn_helpcollations (Transact-SQL)sys.fn_helpcollations (Transact-SQL)