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 № 1Hier wird festgelegt, wie der Datenbankserver sortiert. in diesem Fall:
SQL_Latin1_General_CP1_CI_AS
zerfällt in interessante Teile:
latin1
Lässt den Server Zeichenfolgen mit dem Zeichensatz Latin 1 behandeln, im Grunde genommen ASCIICP1
steht für Code Seite 1252CI
Vergleiche ohne Berücksichtigung der Groß- und Kleinschreibung, sodass "ABC" gleich "abc" istAS
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
, undtempdb
. - Aufgrund der Steuerung der DB-Level-Sortierung von
tempdb
Dies 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 insys.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
, undNTEXT
- aber nicht benutzenTEXT
oderNTEXT
) wenn derCOLLATE
Klausel fehlt in der Spaltendefinition. Das gilt für beideCREATE TABLE
undALTER 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
, undTEXT
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
undNVARCHAR
(d. h. Unicode) Daten.
- Codepage für
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.