Que signifie "RASSEMBLER SQL_Latin1_General_CP1_CI_AS' faire?
J'ai une requête SQL pour créer la base de données dans sql server comme indiqué ci-dessous:
create database yourdb
on
( name = 'yourdb_dat',
filename = 'c:\program files\microsoft sql server\mssql.1\mssql\data\yourdbdat.mdf',
size = 25mb,
maxsize = 1500mb,
filegrowth = 10mb )
log on
( name = 'yourdb_log',
filename = 'c:\program files\microsoft sql server\mssql.1\mssql\data\yourdblog.ldf',
size = 7mb,
maxsize = 375mb,
filegrowth = 10mb )
COLLATE SQL_Latin1_General_CP1_CI_AS;
go
Il fonctionne très bien.
Tandis que le reste de la requête SQL est clair pour moi je suis assez confus au sujet de la fonctionnalité de COLLATE SQL_Latin1_General_CP1_CI_AS
.
Quelqu'un peut-il m'expliquer cela? Aussi, je voudrais savoir si la création de la base de données de cette façon est une bonne pratique?
Vous devez vous connecter pour publier un commentaire.
Il définit la façon dont le serveur de base de données les tris. dans ce cas:
se décompose en parties intéressantes:
latin1
rend le serveur de traiter les chaînes de caractères à l'aide de jeu de caractères latin 1, fondamentalement asciiCP1
est synonyme de la Page de Code 1252CI
insensible à la casse des comparaisons de sorte de " ABC "serait égal à "abc"AS
les accents, donc 'ü' n'est pas égal à 'u'P. S. Pour de plus amples informations assurez-vous de lire @salomon-rutzky réponse.
SQL_Latin1_General_CI_AS
. Plus précisément, CP1 m'a demande.SQL_Latin1_General_CI_AS
. Il est plutôtLatin1_General_CI_AS
. VoirSELECT * FROM fn_helpcollations() where name IN ('SQL_Latin1_General_CP1_CI_AS','Latin1_General_CI_AS','SQL_Latin1_General_CI_AS');
. Il y a de subtiles différences en ce qui concerne le tri et la comparaison entre les deux classements. Voir olcot.co.royaume-uni/sql-les blogs/....S'il vous plaît être conscient que l'on a accepté la réponse est un peu incomplète. Oui, au niveau le plus élémentaire de Classement des poignées de tri. MAIS, la comparaison des règles définies par l'choisis de Classement sont utilisées dans de nombreux endroits à l'extérieur de l'utilisateur des requêtes sur les données de l'utilisateur.
Si "Ce n'
COLLATE SQL_Latin1_General_CP1_CI_AS
faire?" signifie "Ce qui ne l'COLLATE
clause deCREATE DATABASE
faire?", alors:La
COLLATE {collation_name}
de la clause de laCREATE DATABASE
déclaration spécifie le Classement par défaut de la Base de données, et pas le Serveur de Base de données et le Serveur par défaut au niveau des Classements de contrôle des choses différentes.Serveur (c'est à dire de l'Instance)-niveau contrôles:
master
,model
,msdb
, ettempdb
.tempdb
, il est alors le Classement par défaut pour les colonnes de la chaîne dans des tables temporaires (global et local), mais pas les variables de table.master
, il est alors le Classement utilisé pour au niveau du Serveur de données, tels que les noms de Base de données (c'est à direname
colonne danssys.databases
), les noms de Login, etc.GOTO
étiquettesCOLLATE
clause est manquantNiveau de la base de contrôles:
CHAR
,VARCHAR
,NCHAR
,NVARCHAR
,TEXT
, etNTEXT
-- mais ne pas utiliser deTEXT
ouNTEXT
) lorsque leCOLLATE
clause est absent de la définition de la colonne. Cela vaut pour les deuxCREATE TABLE
etALTER TABLE ... ADD
consolidés.'some text'
) et les variables de chaîne de caractères (c'est à dire@StringVariable
). Ce Classement est seulement utilisé lors de la comparaison des chaînes de caractères et variables à d'autres chaînes et des variables. Lors de la comparaison des chaînes de caractères /variables pour les colonnes, le Classement de la colonne sera utilisée.sys.objects
), les noms de colonnes (c'est à diresys.columns
), index des noms (c'est à diresys.indexes
), etc.Aussi:
Latin1
ne pas signifie "ASCII" depuis ASCII standard ne couvre que les valeurs de 0 à 127, et tous des pages de code (qui peut être représenté dans SQL Server, et mêmeNVARCHAR
) carte ces mêmes 128 valeurs, les mêmes caractères.Si "Ce n'
COLLATE SQL_Latin1_General_CP1_CI_AS
faire?" signifie "Qu'est-ce classement ne?", alors:Parce que le nom commence par la
SQL_
, c'est un classement SQL Server, pas un classement Windows. Ce sont définitivement obsolètes, même si ce n'est pas officiellement obsolète, et sont principalement destinés à la pré-compatible avec SQL Server 2000. Bien que, malheureusementSQL_Latin1_General_CP1_CI_AS
est très commun en raison de la valeur par défaut lors de l'installation sur un système d'exploitation à l'aide de l'anglais AMÉRICAIN comme de sa langue. Ces classements doivent être évités si possible.Classements Windows (ceux avec des noms pas de départ avec
SQL_
) sont plus récents et fonctionnels, de la cohérence des tri entreVARCHAR
etNVARCHAR
pour les mêmes valeurs, et sont mis à jour supplémentaires /corrigés trier les poids et les majuscules/minuscules mappages. Ces classements n'ont pas le potentiel problème de performance SQL Server classements ont: Impact sur l'Index Lors du Mixage de type VARCHAR et NVARCHAR Types.Latin1_General
est la culture /locale.NCHAR
,NVARCHAR
, etNTEXT
de données, ce qui détermine les règles linguistiques utilisées pour le tri et la comparaison.CHAR
,VARCHAR
, etTEXT
de données (colonnes, littéraux, et les variables), ce qui détermine l':Latin1_General
classements utiliser la page de code 1252,Hebrew
classements utilisation de code de page 1255, et ainsi de suite.CP{code_page}
ou{version}
CP{code_page}
, est la 8-bits de code de la page qui détermine quels sont les caractères de la carte à des valeurs de 128 à 255. Bien qu'il existe quatre pages de code pour le Double-Byte Character Sets (sur deux octets DBCS) qui peut utiliser les 2 octets de combinaisons pour créer plus de 256 caractères, ces ne sont pas disponibles pour les classements SQL Server.Pour Windows classements:
{version}
, tout n'est pas présent dans tous les noms de classement, se réfère à la version de SQL Server dont le classement a été mis en place (pour la plupart). Les classements Windows avec pas de numéro de version dans le nom de la version80
(sens de SQL Server 2000 qui est de la version 8.0). Pas toutes les versions de SQL Server venir avec les classements de nouveau, donc il y a des lacunes dans les numéros de version. Il ya certains qui sont90
(pour SQL Server 2005, qui est la version 9.0), la plupart sont100
(pour SQL Server 2008, version 10.0), et un petit ensemble a140
(pour SQL Server 2017, la version 14.0).J'ai dit "pour la plupart" parce que les classements se terminant en
_SC
ont été introduites dans SQL Server 2012 (version 11.0), mais les données sous-jacentes n'était pas nouveau, ils ont simplement ajouté le support pour les caractères supplémentaires pour les fonctions intégrées. Donc, ces terminaisons existent pour la version90
et100
les classements, mais seulement à partir de SQL Server 2012.CS
= sensible à la casse ouCI
= casseAS
= accents ouAI
= accentsKS
= Kana type sensible ou manquant = Kana type insensibleWS
= largeur sensibles ou manquant = largeur insensibleVSS
= sélecteur de variante sensible (uniquement disponible dans la version 140 classements) ou manquant = sélecteur de variante insensibleFacultatif dernier morceau:
_SC
à la fin signifie "Caractère Complémentaire de soutien". Le "soutien" seulement affecte la façon dont les fonctions intégrées d'interpréter les paires de substitution (qui sont de façon complémentaire, les caractères sont codés en UTF-16). Sans_SC
à la fin (ou_140_
dans le milieu), les fonctions intégrées de ne pas voir un seul caractère supplémentaire, mais au lieu de voir deux sens du code points de la paire de substitution. Cette fin peut être ajouté à n'importe quel non-binaire, version 90 ou 100 classement._BIN
ou_BIN2
à la fin signifie "binaire", de tri et de comparaison. Les données sont toujours stockées de la même, mais il n'existe pas de règles linguistiques. Cette fin n'est jamais associée avec l'une des 5 des sensibilités ou des_SC
._BIN
est l'ancien style, et_BIN2
est le plus récent, le plus précis de style. Si vous utilisez SQL Server 2005 ou plus récent, l'utilisation_BIN2
. Pour plus de détails sur les différences entre_BIN
et_BIN2
, veuillez consulter: Les différences Entre les Divers Classements Binaires (les Cultures, les Versions, et BIN vs BIN2)._UTF8
est une nouvelle option de SQL Server 2019. C'est une 8-bits de codage qui permet pour l'Unicode des données stockées dansVARCHAR
etCHAR
types de données (mais pas le obsolèteTEXT
type de données). Cette option peut être utilisée uniquement sur les classements qui prennent en charge les caractères supplémentaires (c'est à dire la version 90 ou 100 classements avec_SC
en leur nom, le nom et la version de 140 classements). Il y a aussi un seul binaire_UTF8
classement (_BIN2
, pas_BIN
).VEUILLEZ NOTER: UTF-8 a été conçu et réalisé pour la compatibilité avec les environnements /code qui sont mis en place pour les 8-bits codages encore envie de support de l'Unicode. Même si il ya quelques scénarios où l'UTF-8 peut fournir jusqu'à 50% de gain de place par rapport à
NVARCHAR
, qui est un effet secondaire et a un coût d'un léger coup à la performance dans beaucoup de /la plupart des opérations. Si vous en avez besoin pour la compatibilité, alors le coût est acceptable. Si vous voulez de l'espace d'épargne, vous feriez mieux de le tester, et TESTER à NOUVEAU. De test comprend toutes les fonctionnalités, et bien plus que quelques lignes de données. Soyez averti que l'UTF-8 classements fonctionnent mieux lorsque TOUTES les colonnes, et la base de données elle-même, sont à l'aide deVARCHAR
de données (colonnes, les variables, les littéraux de chaîne) avec un_UTF8
classement. C'est l'état naturel pour toute personne utilisant ce pour la compatibilité, mais pas pour ceux qui veulent l'utiliser pour l'espace d'épargne. Soyez prudent lors du mélange de données VARCHAR à l'aide d'un_UTF8
classement avec soitVARCHAR
données à l'aide de non-_UTF8
classements ouNVARCHAR
de données, que vous pouvez rencontrer un comportement étrange /la perte de données. Pour plus de détails sur la nouvelle UTF-8 classements, voir: Natif de l'UTF-8 est pris en charge dans SQL Server 2019: Sauveur ou Faux Prophète?COLLATE
clause deCREATE DATABASE
n'. Vous avez dit plusieurs choses qu'il fait. Pourquoi supposez-vous que l'OP veut seulement savoir 10% de la réponse? Si toutes les informations sont présentées, chaque personne peut décider de la quantité à prendre. Mais si seulement une partie de l'info est donnée, le choix a été fait pour eux. - Je choisir de fournir autant d'informations que possible, parce que la plupart de c'est pas bien connue. (suite)La CP1, signifie "de la Page de Code de 1' -, techniquement, cela se traduit par la page de code 1252
La RASSEMBLER mot clé de spécifier quel type de jeu de caractères et les règles de l'ordre, de la confrontation des règles) que vous utilisez pour les valeurs de chaîne.
Par exemple, dans votre cas, vous utilisez latine, les règles avec de la casse (CI) et les accents (COMME)
Vous pouvez vous référer à ce La Documentation
Indique le classement par défaut de la base de données. Chaque champ de texte que vous créez dans les tables dans la base de données, utilisez ce classement, sauf si vous spécifiez un autre.
Une base de données a toujours un classement par défaut. Si vous ne spécifiez pas tout, le classement par défaut de l'instance de SQL Server est utilisé.
Le nom de la collation que vous utilisez montre qu'il utilise le codage Latin1 code de la page 1, est insensible à la casse (CI) et les accents (COMME). Ce classement est utilisé aux états-unis, de sorte qu'il contiendra des règles de tri qui sont utilisés dans les états-unis.
Le classement décide de la façon dont les valeurs de texte sont comparés pour l'égalité et la ressemblance, et comment ils sont comparés lors du tri. Le code de page est utilisé lors de l'entreposage de données non-unicode, par exemple, les champs varchar.
not
spécifier un classement, même si vous pouvez accepter la valeur par défaut) mauvais (il est utilisé pour les données unicode trop)Latin1_General_CI_AS
. Maintenant que j'ai lu il mauvais parce que je m'attendais à l'instruction concernant classement du SERVEUR qui ne requièrent l'acceptation de défaut dans l'INTERFACE utilisateur. Pour le 2ème point, vous semblez impliquent ce classement est pas utilisé pour le tri de données unicode (même si vous passez desorting
àstoring
dans les 2 dernières phrases). Texte Unicode données obéit aussi des classements.