/ / Was macht 'COLLATE SQL_Latin1_General_CP1_CI_AS'? - SQL-Server, Datenbank, Tsql, Kollatierung

Was macht 'COLLATE SQL_Latin1_General_CP1_CI_AS'? - SQL-Server, Datenbank, Tsql, Kollatierung

Ich habe eine SQL-Abfrage, um die Datenbank in SQLServer wie folgt zu erstellen:

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

Es läuft gut.

Während der Rest des SQL klar ist, bin ich ziemlich verwirrt über die Funktionalität von COLLATE SQL_Latin1_General_CP1_CI_AS.

Kann mir das jemand erklären? Außerdem möchte ich wissen, ob das Erstellen der Datenbank auf diese Weise eine bewährte Methode ist.

Antworten:

174 für die Antwort № 1

Hier wird festgelegt, wie der Datenbankserver sortiert. in diesem Fall:

SQL_Latin1_General_CP1_CI_AS

zerfällt in interessante Teile:

  1. latin1 Lässt den Server Zeichenfolgen mit dem Zeichensatz Latin 1 behandeln, im Grunde genommen ASCII
  2. CP1 steht für Code Seite 1252
  3. CI Vergleiche ohne Berücksichtigung der Groß- und Kleinschreibung, sodass "ABC" gleich "abc" ist
  4. AS akzentempfindlich, daher ist "ü" nicht gleich "u"

P.S. Für detailliertere Informationen gehen Sie bitte auf lies @ solomon-rutzkys antwort.


22 für die Antwort № 2

Der CP1 bedeutet "Codepage 1" - technisch bedeutet dies Codepage 1252


17 für die Antwort № 3

Bitte beachten Sie, dass die akzeptierte Antwort ein bisschen istunvollständig. Ja, auf der einfachsten Ebene übernimmt Collation das Sortieren. ABER die Vergleichsregeln, die durch die ausgewählte Sortierung definiert sind, werden an vielen Stellen außerhalb von Benutzerabfragen mit Benutzerdaten verwendet.

Das COLLATE {collation_name} Klausel des CREATE DATABASE Anweisung gibt die Standardkollation der an Datenbank, und nicht der Server; Standardkollatierungen auf Datenbank- und Serverebene steuern verschiedene Dinge.

Server (d. H. Instanz) -Stufe Kontrollen:

  • Sortierung auf Datenbankebene für Systemdatenbanken: master, model, msdb, und tempdb.
  • Aufgrund der Steuerung der DB-Level-Sortierung von tempdbDies ist dann die Standardkollatierung für Zeichenfolgenspalten in temporären Tabellen (global und lokal), jedoch nicht für Tabellenvariablen.
  • Aufgrund der Steuerung der DB-Level-Sortierung von master, dann ist es die Sortierung, für die verwendet wird Serverebene Daten, wie Datenbanknamen (d. h. name Spalte in sys.databases), Anmeldenamen usw.
  • Behandlung von Parameter- / Variablennamen
  • Umgang mit Cursornamen
  • Handhabung GOTO Etiketten
  • Standardkollatierung, die für neu erstellte Datenbanken verwendet wird, wenn COLLATE Klausel fehlt

Datenbankebene Kontrollen:

  • Standardkollatierung für neu erstellte Zeichenfolgenspalten (CHAR, VARCHAR, NCHAR, NVARCHAR, TEXT, und NTEXT - aber nicht benutzen TEXT oder NTEXT) wenn der COLLATE Klausel fehlt in der Spaltendefinition. Das gilt für beide CREATE TABLE und ALTER TABLE ... ADD Aussagen.
  • Standardkollation für String-Literale (d. H. "some text") und Zeichenkettenvariablen (d.h. @StringVariable). Diese Sortierung wird immer nur beim Vergleichen von Zeichenfolgen und Variablen mit anderen Zeichenfolgen und Variablen verwendet. Beim Vergleichen von Zeichenfolgen / Variablen mit Spalten wird die Sortierung der Spalte verwendet.
  • Die Sortierung für Datenbankebene Metadaten, wie Objektnamen (d. h. sys.objects), Spaltennamen (d. h. sys.columns), Indexnamen (d. h. sys.indexes), etc.
  • Die Sortierung für Datenbankebene Objekte: Tabellen, Spalten, Indizes usw.

Ebenfalls:

  • Kollationen beginnend mit SQL_ sind die alten (und definitiv veralteten, auch nicht offiziell veralteten) SQL Server-spezifischen Kollatierungen (die erstellt wurden, bevor SQL Server Kollatierungen auf Betriebssystemebene verwenden konnte).
  • Alle anderen Kollatierungen sind Windows-Kollatierungen und sollten verwendet werden.
  • ASCII ist eine 8-Bit-Codierung (für die allgemeine Verwendung; technisch gesehen ist "ASCII" 7-Bit mit den Zeichen 0 bis 127 und "Extended ASCII" 8-Bit mit den Zeichen 0 bis 255).
  • Latin1 verweist auf die Kultur / das Gebietsschema, die / das bestimmt:
    • Codepage für CHAR, VARCHAR, und TEXT Daten (Spalten, Literale und Variablen). Die Codepage ist der "erweiterte" Teil von Extended ASCII und steuert, welche Zeichen für die Werte 128 - 255 verwendet werden.
    • Die Regeln, nach denen Zeichen sortiert und verglichen werden. Dies deckt beides ab VARCHAR und NVARCHAR (d. h. Unicode) Daten.

15 für die Antwort № 4

Das COLLATE Schlüsselwort Geben Sie an, welche Art von Zeichensatz und Regeln (Reihenfolge, Konfrontationsregeln) Sie für Zeichenfolgenwerte verwenden.

In Ihrem Fall verwenden Sie beispielsweise lateinische Regeln, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird (CI) und akzentabhängig (WIE)

Sie können sich darauf beziehen Dokumentation


8 für die Antwort № 5

Dies gibt die Standardkollatierung für die Datenbank an. Jedes Textfeld, das Sie in Tabellen in der Datenbank erstellen, verwendet diese Sortierung, sofern Sie keine andere angeben.

Eine Datenbank hat immer eine Standardkollatierung. Wenn Sie keine angeben, wird die Standardkollatierung der SQL Server-Instanz verwendet.

Der Name der von Ihnen verwendeten Kollatierung zeigt diesEs verwendet die Latin1-Codepage 1 und unterscheidet zwischen Groß- und Kleinschreibung (CI) und Akzent (AS). Diese Sortierung wird in den USA verwendet und enthält daher Sortierregeln, die in den USA verwendet werden.

Die Sortierung bestimmt, wie Textwerte auf Gleichheit und Ähnlichkeit verglichen werden und wie sie beim Sortieren verglichen werden. Die Codepage wird verwendet, wenn Nicht-Unicode-Daten gespeichert werden, z. varchar Felder.