QU'est-ce que' COLLATE SQL Latin1 General CP1 CI AS ' fait?

j'ai une requête SQL pour créer la base de données dans SQLServer comme indiqué ci-dessous:

create database yourdb
on
( name = 'yourdb_dat',
  filename = 'c:program filesmicrosoft sql servermssql.1mssqldatayourdbdat.mdf',
  size = 25mb,
  maxsize = 1500mb,
  filegrowth = 10mb )
log on
( name = 'yourdb_log',
  filename = 'c:program filesmicrosoft sql servermssql.1mssqldatayourdblog.ldf',
  size = 7mb,
  maxsize = 375mb,
  filegrowth = 10mb )
COLLATE SQL_Latin1_General_CP1_CI_AS;
go

ça marche très bien.

tandis que le reste de la SQL est clair pour être je suis tout à fait confus au sujet de la fonctionnalité de COLLATE SQL_Latin1_General_CP1_CI_AS .

quelqu'un peut-il me l'expliquer? Aussi, je voudrais savoir si la création de la base de données de cette façon est une bonne pratique?

82
demandé sur Solomon Rutzky 2011-02-18 11:45:16

5 réponses

définit comment le serveur de base de données trie. dans ce cas:

SQL_Latin1_General_CP1_CI_AS

se divise en parties intéressantes:

  1. latin1 rend le serveur traiter les chaînes en utilisant le charset latin 1, essentiellement ascii
  2. CP1 signifie page de Code 1252
  3. CI comparaisons non sensibles à la casse donc "ABC" égale " abc
  4. AS sensible à l'accent, donc "ü" n'égale pas "u "

P. pour plus d'informations, n'oubliez pas de lire la réponse de solomon-rutzky .

180
répondu Kris 2017-09-18 08:32:21

le CP1 signifie "page de Code 1" - techniquement cela se traduit par page de code 1252

22
répondu Chris Halcrow 2013-04-29 22:00:03

veuillez noter que la réponse acceptée est un peu incomplète. Oui, au niveau le plus basique, les collecteurs de tri. Mais, les règles de comparaison définies par la Collation choisie sont utilisées dans de nombreux endroits en dehors des requêtes des utilisateurs contre les données des utilisateurs.

la clause COLLATE {collation_name} de la déclaration CREATE DATABASE spécifie la Collation par défaut de la base de données , et pas le serveur; niveau de la base de données et Les Collations par défaut au niveau du serveur contrôlent différentes choses.

Serveur (c'est à dire de l'Instance) "au niveau de la 1519450920 de contrôles":

  • au niveau de la Base de Classement pour les Bases de données système: master , model , msdb , et tempdb .
  • en raison de la commande de la Collation de niveau DB de tempdb , il est alors la Collation par défaut pour les colonnes de chaîne dans les tables temporaires (globale et locale), mais pas les variables de table.
  • en raison du contrôle de la compilation de niveau DB de master , il est alors la compilation utilisée pour niveau serveur données, tels que les noms de base de données (i.e. name colonne dans sys.databases ), les noms de connexion, etc.
  • manipulation des noms de paramètres / variables
  • manipulation des noms de curseur
  • manipulation de GOTO étiquettes
  • par défaut Compilation utilisée pour les bases de données nouvellement créées lorsque la clause COLLATE est manquante 1519490920"

Base de données "au niveau de la 1519450920 de contrôles":

  • Collation par défaut utilisée pour les nouvelles colonnes string( CHAR , VARCHAR , NCHAR , NVARCHAR , TEXT , et NTEXT -- mais n'utilisez pas TEXT ou NTEXT ) lorsque la clause COLLATE est manquante dans la colonne définition. Cela vaut pour les deux déclarations CREATE TABLE et ALTER TABLE ... ADD .
  • Collation par défaut utilisée pour les chaînes littérales (i.e. 'some text' ) et les variables de chaîne (i.e. @StringVariable ). Cette compilation n'est utilisée que pour comparer des chaînes et des variables à d'autres chaînes et variables. En comparant les chaînes / variables aux colonnes, alors la Collation de la colonne sera utilisée.
  • Le Classement utilisé pour au niveau de la Base méta-données, telles que les noms d'objets (i.e. sys.objects ), les noms de colonnes (i.e. sys.columns ), les noms d'index (i.e. sys.indexes ), etc.
  • Le Classement utilisé pour Base de données "au niveau de la 1519390920" objets: tables, colonnes, index, etc.

aussi:

  • Collations à partir de SQL_ sont les vieux (et certainement obsolète, même si pas officiellement des Collations spécifiques à SQL Server (créées avant que SQL Server puisse utiliser des Collations au niveau OS).
  • toutes les autres Collations sont des Collations Windows et doivent être celles qui sont utilisées.
  • ASCII est un encodage à 8 bits (pour usage courant; techniquement "ASCII" est de 7 bits avec les caractères 0-127, et" Extended ASCII "est de 8 bits avec les caractères 0 - 255)
  • Latin1 renvoie à la culture / localité qui détermine:
    • Page de Code pour CHAR , VARCHAR , et TEXT de données (colonnes, littéraux, et les variables). La page de Code est la partie" extended " de L'ASCII étendu, et contrôle les caractères qui sont utilisés pour les valeurs 128 - 255.
    • les règles selon lesquelles les caractères sont triés et comparés. Cela couvre à la fois les données VARCHAR et NVARCHAR (C'est-à-dire Unicode).
21
répondu Solomon Rutzky 2017-10-09 19:53:59

le COLLATE mot-clé spécifie quel type de jeu de caractères et de règles (ordre, règles de confrontation) vous utilisez pour les valeurs de chaîne.

par exemple, dans votre cas, vous utilisez des règles latines insensibles à la casse ( CI ) et sensibles à l'accent ( AS )."

vous pouvez vous référer à cette Documentation

15
répondu il_guru 2011-02-18 08:54:20

spécifie la compilation par défaut pour la base de données. Chaque champ de texte que vous créez dans les tables de la base de données utilisera cette collation, à moins que vous n'en spécifiez une différente.

une base de données a toujours une collation par défaut. Si vous n'en spécifiez pas, la compilation par défaut de L'instance SQL Server est utilisée.

le nom de la collation que vous utilisez montre qu'elle utilise le code Latin1 page 1, est insensible à la casse (CI) et sensible à l'accent (COMME.) Cette compilation est utilisée aux États-Unis, elle contiendra donc des règles de tri qui sont utilisées aux États-Unis.

la collation décide comment les valeurs du texte sont comparées pour l'égalité et la ressemblance, et comment elles sont comparées lors du tri. La page de code est utilisée lors du stockage de données non unicode, par exemple les champs varchar.

8
répondu Guffa 2015-11-17 15:09:31