SQL Server: définir le jeu de caractères (pas de classement)
Comment peut-on définir le jeu de caractères par défaut pour les champs lors de la création des tables dans SQL Server? MySQL ne fait cela:
CREATE TABLE tableName (
name VARCHAR(128) CHARACTER SET utf8
) DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Note que j'ai mis le jeu de caractères à deux reprises ici. Il est redondant, j'ai ajouté deux façons seulement à démontrer.
J'ai mis le classement aussi de montrer que le classement est quelque chose de différent. Je suis pas demander à propos de la définition du classement. La plupart des questions poser sur les jeux de caractères et les codages dans SQL Server sont répondues avec classement, qui est pas la même chose.
Ils sont la même chose dans SQL Server. En définissant le classement sur un
Merci à Martin. Où est-ce documenté? Bien sûr, je suis allé à travers la documentation MSDN (en ligne) mais je ne vois aucune mention de celui-ci.
Les classements de contrôle de la physique de stockage de chaînes de caractères dans SQL Server. Un classement spécifie [ ] les motifs de bits qui représentent chaque caractère de et les règles par lesquelles les personnages sont triés et comparés. Lien
varchar
colonne vous pouvez aussi choisir la page de code.Merci à Martin. Où est-ce documenté? Bien sûr, je suis allé à travers la documentation MSDN (en ligne) mais je ne vois aucune mention de celui-ci.
Les classements de contrôle de la physique de stockage de chaînes de caractères dans SQL Server. Un classement spécifie [ ] les motifs de bits qui représentent chaque caractère de et les règles par lesquelles les personnages sont triés et comparés. Lien
OriginalL'auteur dotancohen | 2011-10-15
Vous devez vous connecter pour publier un commentaire.
Comme indiqué dans le BOL
La citation ci-dessus est à partir de 2000 documents. Voir aussi ce 2008 lien. Le ci-dessous le démontre.
Résultats
Vous pouvez utiliser explicite
collate
clause d'utiliser différents sémantique de comparaison, mais vous ne pouvez pas définir vos propres règles de classement.Smith Votre réponse est grille.... le tout dépend du moment de la création de bases de Données... il est très important de sélectionner le bon classement..
et Martin: voir ma réponse pour plus de détails sur les jeux de caractères et les codages :-). +1 pour montrer les variations entre les 3 pages de code / classements.
et Martin: consultez la mise à JOUR en bas de ma réponse. Il y a de nouvelles infos, comme de SQL Server 2019.
OriginalL'auteur Martin Smith
Étendre sur @Martin réponse:
Comment vous définissez un "jeu de caractères" dans SQL Server dépend du type de données que vous utilisez. Si vous utilisez:
NVARCHAR
,NCHAR
, etNTEXT
(NTEXT
est obsolète et ne doit pas être utilisé en tant que de SQL Server 2005) utilisent tous le jeu de caractères Unicode et cela ne peut être changé. Ces types de données sont tous encodés en UTF-16 LE (Little Endian) – 16 bits de codage à chaque "personnage" qui sont soit en 2 ou 4 octets – et cela aussi ne peut pas être modifié. Pour ces types de données, le Classement utilisé n'affecte que les paramètres régionaux (tel que déterminé par le LCID du Classement) qui détermine l'ensemble des règles utilisées pour le tri et la comparaison.XML
, comme leN
préfixé types, utilise le jeu de caractères Unicode et UTF-16 LE (Little Endian), et aucun de ceux qui peut être changé. Mais à la différence de l'autre de la chaîne de types de données, il n'y a pas de Classement associéXML
les données ne peuvent pas être triés ou par rapport (au moins pas sans d'abord le convertirNVARCHAR(MAX)
[préféré] ouVARCHAR(MAX)
).VARCHAR
,CHAR
, etTEXT
(TEXT
est obsolète et ne doit pas être utilisé en tant que de SQL Server 2005) sont tous les 8-bits encodages avec chaque "caractère" de l'être 1 ou 2 octets. Le jeu de caractère est déterminé par le Code de la Page associée à chaque Classement. Le tri et la comparaison des règles dépendent du type de Classement utilisé:SQL_
et ont été dépréciées depuis SQL Server 2000, mais sont (malheureusement) encore en usage aujourd'hui. Ces simples règles indiqué que le "SQL Server Ordre de Tri" le nombre, comme dans ladescription
champ renvoyé parsys.fn_helpcollations()
.SQL_
. Ces Classements permettent la chaîne Unicode non de données à utiliser l'Unicode de tri et de comparaison règles indiquées par le LCID du Classement.Cela étant dit, à savoir le jeu de caractères (pour
CHAR
,VARCHAR
, etTEXT
– c'est à dire non-Unicode – données) est utilisé, exécutez la requête suivante et de prêter attention à laCodePage
champ. LeLCID
champ indique les paramètres régionaux utilisés pour le tri et la comparaison des règles pour laN
-préfixe – c'est à dire Unicode – types ainsi que la non-Unicode types si à l'aide d'un Classement Windows:La Page de Code Id peut être traduit en quelque chose de plus significatif via la page MSDN pour Code De La Page Des Identifiants.
Concernant l'O. P. commentaire sur @Martin réponse:
S'il est vrai que Microsoft aurait pu faire mieux lors du choix d'un nom, il n'y a malheureusement une manière générale, l'ensemble de l'industrie de la confusion sur les termes tels que "encodage", "jeu de caractères", "classement", etc. L'utilisation par Microsoft (ou l'abus) de "Classement", a simplement contribué à la confusion de masse. Mais, cette confusion est également évidente dans MySQL comme le montre cette question, étant donné que "utf8" est spécifiquement pas un jeu de caractères ;-).
UTF-8 est l'un de plusieurs codages pour le jeu de caractères Unicode. UTF-16 et UTF-32 sont les deux autres encodages. Tous les trois de ces codages de représenter exactement le même jeu de caractères Unicode, juste de différentes manières. En regardant la liste de MySQL jeux de caractères – 11.1.10 pris en charge les Jeux de Caractères et les Classements – le "ucs2", "utf8", "utf8mb4", "utf16", "utf16le", "utf32" jeux de caractères ne sont pas réellement des jeux de caractères, à proprement parler, mais plusieurs représentations du jeu de caractères Unicode. Mais, étant donné le chevauchement entre les notions de "jeu de caractères" et "codage", il serait difficile de ne pas avoir cette confusion. Le 11.1.10.1 Jeux De Caractères Unicode page indique que la "utf8mb4", "utf16", "utf16le", et "utf32" jeux de caractères de l'Unicode jeux de caractères "ucs2" et "utf8" sont des sous-ensembles du jeu de caractères Unicode, particulièrement la première de 65 536 points de code (un.k.un. Basic Multilingual Plane (BMP)).
Pour plus d'info concernant le Classement à travers différents SGBDR, veuillez voir ma réponse à la question suivante sur DBA.StackExchange:
N'importe quel SGBD un classement qui est à la fois sensible à la casse et les accents?
Mise à JOUR 2018-10-02
Alors que ce n'est pas une option viable encore, SQL Server 2019 introduit la prise en charge native pour l'UTF-8 dans
VARCHAR
/CHAR
les types de données. Il y a actuellement trop de bugs avec elle pour lui pour être utilisés, mais s'ils sont fixes, alors c'est une option pour certains scénarios. Veuillez voir mon post, "Natif de l'UTF-8 est pris en charge dans SQL Server 2019: Sauveur ou Faux Prophète?", pour une analyse détaillée de cette nouvelle fonctionnalité.OriginalL'auteur Solomon Rutzky