Sortierung und internationale Terminologie

Sortierungen in SQL Server bieten Sortierregeln und die Berücksichtigung von Groß-/Kleinschreibung und Akzenten für die Daten. Sortierungen, die mit Zeichendatentypen wie char und varchar verwendet werden, geben die Codeseite und die entsprechenden Zeichen vor, die für den jeweiligen Datentyp dargestellt werden können. Bei der Installation einer neuen Instanz von SQL Server, bei der Wiederherstellung einer Datenbanksicherung oder bei der Verbindung von Servern mit Clientdatenbanken ist es wichtig, dass Sie die Gebietsschemaanforderungen, die Sortierreihenfolge und das Verhalten in Bezug auf die Groß-/Kleinschreibung und Akzente der Daten kennen, mit denen Sie arbeiten.

Wenn Sie eine Sortierung für den Server, die Datenbank, die Spalte oder den Ausdruck auswählen, weisen Sie den Daten bestimmte Merkmale zu, die Auswirkungen auf die Ergebnisse vieler Datenbankvorgänge haben. Wenn Sie beispielsweise eine Abfrage mit ORDER BY erstellen, kann die Sortierreihenfolge des Resultsets von der Sortierung abhängen, die für die Datenbank gilt oder die in einer COLLATE-Klausel auf Ausdrucksebene der Abfrage vorgegeben ist.

Eine Sortierung kann eine oder alle der folgenden Eigenschaften aufweisen:

  • Unterscheidung nach Groß-/Kleinschreibung

  • Unterscheidung nach Akzent

  • Unterscheidung nach Kana

  • Unterscheidung nach Breite

Zur optimalen Verwendung der Sortierungsunterstützung in SQL Server ist es erforderlich, die in diesem Thema beschriebenen Begriffe zu verstehen und zu wissen, wie sie mit den Eigenschaften der Daten in Zusammenhang stehen.

Begriffe

  • Sortierung

  • Gebietsschema

  • Unicode

  • Codepage

  • Datentypen

  • Sortierreihenfolge

Sortierung

Eine Sortierung gibt die Bitmuster an, die die jeweiligen Zeichen in einem Datensatz darstellen. Sortierungen bestimmen auch die Regeln zum Sortieren und Vergleichen von Daten. SQL Server unterstützt das Speichern von Objekten mit verschiedenen Sortierungen in einer Datenbank. Bei Nicht-Unicode-Spalten gibt die Sortierungseinstellung die Codepage für die Daten und die Zeichen an, die dargestellt werden können. Daten, die zwischen Nicht-Unicode-Spalten verschoben werden, müssen jedoch von der Quellcodepage in die Zielcodepage konvertiert werden.

Transact-SQL-Anweisungsergebnisse können unterschiedlich sein, wenn die Anweisung im Kontext verschiedener Datenbanken ausgeführt wird, die jeweils andere Sortierungseinstellungen haben. Wenn möglich, sollte in Unternehmen eine standardisierte Sortierung verwendet werden. Auf diese Weise müssen Sie die Sortierung nicht explizit für jedes Zeichen oder jeden Unicode-Ausdruck angeben. Bei Objekten mit abweichenden Sortierungs- oder Codepageeinstellungen codieren Sie Ihre Abfragen so, dass diese den Regeln der Sortierungspriorität entsprechen. Weitere Informationen finden Sie im Abschnitt zur Rangfolge der Sortierungen (Transact-SQL).

Die Merkmale einer Sortierung sind die Abhängigkeit von Sprache, Groß-/Kleinschreibung, Akzent, Kana und Breite.

SQL Server-Sortierungen beinhalten die folgenden Sortierungssätze:

  • Windows-Sortierungen
    Windows-Sortierungen definieren Regeln zum Speichern von Zeichendaten, die auf dem zugehörigen Windows-Systemgebietsschema basieren. Bei einer Windows-Sortierung wird der Vergleich der Nicht-Unicode-Daten implementiert, indem derselbe Algorithmus wie bei Unicode-Daten verwendet wird. Die grundlegenden Regeln für Windows-Sortierreihenfolgen geben an, welches Alphabet oder welche Sprache verwendet wird, wenn Wörterbuchsortierung angewendet wird. Zudem geben die Regeln die Codepage an, die zum Speichern von Nicht-Unicode-Zeichendaten verwendet wird. Sowohl die Unicode- als auch die Nicht-Unicode-Sortierung sind kompatibel mit Zeichenfolgenvergleichen in einer bestimmten Version von Windows. Dadurch wird die Konsistenz der Datentypen in SQL Server ermöglicht. Außerdem erhalten Entwickler so die Möglichkeit, Zeichenfolgen in ihren Anwendungen mithilfe der gleichen Regeln zu sortieren, die auch in SQL Server verwendet werden. Weitere Informationen finden Sie unter Sortierungseinstellungen im Setup-Programm.

  • Binäre Sortierungen
    Binäre Sortierungen sortieren Daten basierend auf der Reihenfolge codierter Werte, die vom Gebietsschema und Datentyp definiert werden. Dabei wird die Groß- und Kleinschreibung beachtet. Eine binäre Sortierung in SQL Server definiert das zu verwendende Gebietsschema sowie die zu verwendende ANSI-Codepage. Dies erzwingt eine binäre Sortierreihenfolge. Da binäre Sortierungen relativ einfach sind, tragen sie dazu bei, die Anwendungsleistung zu verbessern. Bei Nicht-Unicode-Datentypen basieren Datenvergleiche auf den in der ANSI-Codepage definierten Codepunkten. Bei Unicode-Dateitypen basieren Datenvergleiche auf den Unicode-Codepunkten. Bei binären Sortierungen von Unicode-Datentypen wird das Gebietsschema bei Datensortierungen nicht berücksichtigt. Beispielsweise führen Latin_1_General_BIN und Japanese_BIN bei Unicode-Daten zu den gleichen Sortierergebnissen.

    Bei binären Sortierungen in älteren Versionen von SQL Server wurde das erste Zeichen als WCHAR verglichen und dann ein byteweiser Vergleich durchgeführt. Aus Gründen der Abwärtskompatibilität wird die Semantik vorhandener binärer Sortierungen nicht geändert.

    Binäre Sortierungen in dieser Version von SQL Server beinhalten einen Satz von Sortierungen, die auf reinen Codepunktvergleichen basieren. Sie können zu den binären Sortierungen migrieren, um von den echten Codepunktvergleichen zu profitieren. Sie sollten beim Entwickeln neuer Anwendungen binäre Sortierungen verwenden. Das BIN2-Suffix identifiziert die Namen von Sortierungen, die die neue auf Codepunkten basierende Sortierungssemantik implementieren. Außerdem ist ein Vergleichsflag vorhanden, das dem Suffix BIN2 für die neue binäre Sortierung entspricht. Weitere Informationen finden Sie unter Richtlinien für das Verwenden von BIN- und BIN2-Sortierungen.

  • SQL Server
    SQL Server-Sortierungen (SQL_*) sind hinsichtlich der Sortierreihenfolge mit älteren Versionen von SQL Server kompatibel. Die Wörterbuch-Sortierungsregeln für Nicht-Unicode-Daten sind nicht kompatibel mit den vom Betriebssystem Windows bereitgestellten Sortierroutinen. Das Sortieren von Unicode-Daten ist jedoch kompatibel mit einer bestimmten Version der Windows-Sortierregeln. Da SQL Server-Sortierungen unterschiedliche Vergleichsregeln für Nicht-Unicode- und Unicode-Daten verwenden, werden bei Vergleichen derselben Daten, je nach dem zugrunde liegenden Datentyp, unterschiedliche Ergebnisse angezeigt. Weitere Informationen finden Sie unter Verwenden von SQL Server-Sortierungen.

    HinweisHinweis

    Wenn Sie eine englischsprachige Instanz von SQL Server aktualisieren, können Sie SQL Server-Sortierungen (SQL_*) angeben, die mit vorhandenen Instanzen von SQL Server kompatibel sein sollen. Da die Standardsortierung einer Instanz von SQL Server während des Setups festgelegt wird, ist es wichtig, die Sortierungseinstellungen in den folgenden Fällen sorgfältig anzugeben:

    • Der Anwendungscode ist abhängig vom Verhalten der vorherigen SQL Server-Sortierungen.

    • Sie beabsichtigen, die SQL Server-Replikation mit vorhandenen Installationen von SQL Server 6.5 oder SQL Server 7.0 zu verwenden.

    • Sie müssen Zeichendaten speichern, die mehrere Sprachen wiedergeben.

Das Festlegen von Sortierungen wird bei einer Instanz von SQL Server für die folgenden Ebenen unterstützt:

  • Sortierungen auf Serverebene
    Die Standardsortierung wird während des SQL Server-Setups festgelegt und außerdem als Standardsortierung der Systemdatenbanken vorgegeben. Beachten Sie, dass Nur-Unicode-Sortierungen während des SQL Server-Setups nicht ausgewählt werden können, da sie nicht als Sortierungen auf Serverebene unterstützt werden.

    Mit Ausnahme der Sortierung von Spalten und Datenbanken kann die Sortierung, die einem Objekt zugewiesen wurde, nur durch Löschen und erneutes Erstellen des Objekts geändert werden. Statt die Standardsortierung einer Instanz von SQL Server zu ändern, können Sie die Sortierung auch beim Erstellen einer neuen Datenbank oder Datenbankspalte angeben.

    Zum Abfragen der Serversortierung einer Instanz von SQL Server verwenden Sie die folgende Transact-SQL-SERVERPROPERTY-Funktion:

    SELECT CONVERT (varchar, SERVERPROPERTY('collation'))
    

    Verwenden Sie die folgende integrierte fn_helpcollations()-Funktion, um alle verfügbaren Sortierungen vom Server abzufragen.

    SELECT * from ::fn_helpcollations()
    
  • Sortierungen auf Datenbankebene
    Beim Anlegen einer Datenbank können Sie die Standardsortierung der Datenbank mithilfe der COLLATE-Klausel der CREATE DATABASE-Anweisung angeben. Wenn keine Sortierung angegeben ist, wird der Datenbank die Standardsortierung der model-Datenbank zugewiesen. Die Sortierung der model-Datenbank entspricht der Standardsortierung einer Instanz von SQL Server.

    Die Sortierung einer Benutzerdatenbank kann mithilfe einer ALTER DATABASE-Anweisung geändert werden, die folgendermaßen aussehen kann:

    ALTER DATABASE myDB COLLATE Greek_CS_AI
    

    Die aktuelle Sortierung einer Datenbank kann mithilfe einer Anweisung abgerufen werden, die folgendermaßen aussehen kann:

    SELECT CONVERT (varchar, DATABASEPROPERTYEX('database_name','collation'))
    
    HinweisHinweis

    Das Ändern der Sortierung auf Datenbankebene hat keinen Einfluss auf Sortierungen auf Spalten- oder Ausdrucksebene.

  • Sortierungen auf Spaltenebene
    Wenn Sie eine Tabelle erstellen, können Sie mithilfe der COLLATE-Klausel der CREATE TABLE- oder ALTER TABLE-Anweisung für jede Zeichenfolgenspalte eine Sortierung angeben. Wenn keine Sortierung angegeben ist, wird der Spalte die Standardsortierung der Datenbank zugewiesen.

    Die Sortierung einer Spalte kann mithilfe einer ALTER TABLE-Anweisung geändert werden, die z. B. folgendermaßen aussehen kann:

    ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR(10) COLLATE Greek_CS_AI
    
  • Sortierungen auf Ausdrucksebene
    Sortierungen auf Ausdrucksebene werden zum Zeitpunkt der Ausführung einer Anweisung festgelegt. Sie haben Auswirkungen auf die Art und Weise, wie ein Resultset zurückgegeben wird. Somit können die ORDER BY-Sortierergebnisse gebietsschemaspezifisch sein. Implementieren Sie mithilfe einer COLLATE-Klausel, die folgendermaßen aussehen kann, Sortierungen auf Ausdrucksebene:

    SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI
    

Zurück zum Anfang

Gebietsschema

Ein Gebietsschema ist ein Satz von Informationen, die einem Ort oder einer Kultur zugeordnet sind. Es kann Name und Bezeichner der gesprochenen Sprache, die Schrift, die zum Schreiben dieser Sprache verwendet wird, sowie kulturelle Konventionen enthalten. Sortierungen können einem oder mehreren Gebietsschemas zugeordnet sein.

Zurück zum Anfang

Unicode

Wenn Sie Zeichendaten speichern, die mehrere Sprachen darstellen, müssen Sie statt der Nicht-Unicode-Datentypen (char, varchar und text) die Unicode-Datentypen (nchar, nvarchar und ntext) verwenden.

Nicht-Unicode-Datentypen verfügen über umfassende Einschränkungen. Das liegt daran, dass ein Nicht-Unicode-Computer auf die Verwendung einer einzelnen Codepage beschränkt ist. Es kann sein, dass Sie mit Unicode eine bessere Systemleistung erzielen, da weniger Codepagekonvertierungen erforderlich sind. Unicode-Sortierungen müssen auf der Datenbank-, Spalten- oder Ausdrucksebene einzeln ausgewählt werden, weil sie auf Serverebene nicht unterstützt werden.

Die Codepages, die ein Client verwendet, werden durch die Einstellungen des Betriebssystems bestimmt. Verwenden Sie zum Festlegen von Clientcodepages unter den Betriebssystemen Windows 2000, Windows XP, Windows Server 2003 oder Windows Server 2008 die Option Ländereinstellungen/Regionale Einstellungen in der Systemsteuerung.

Wenn Sie Daten von einem Server auf einen Client verschieben, wird die Serversortierung von älteren Clienttreibern möglicherweise nicht erkannt. Dies kann passieren, wenn Sie Daten von einem Unicode-Server auf einen Nicht-Unicode-Client verschieben. Die beste Möglichkeit, dieses Problem zu beheben, besteht in einem Update des Clientbetriebssystems, wobei die zugrunde liegenden Systemsortierungen aktualisiert werden. Wenn auf dem Client Datenbankclient-Software installiert ist, sollten Sie ein Serviceupdate der Datenbankclient-Software in Erwägung ziehen.

Sie können auch versuchen, eine andere Sortierung für die Daten auf dem Server zu verwenden. Wählen Sie eine Sortierung aus, die einer Codepage auf dem Client zugeordnet werden kann. Weitere Informationen finden Sie im Thema "Festlegen und Ändern von Sortierungen" in der SQL Server-Onlinedokumentation.

Zum Abwägen der Vor- und Nachteile von Unicode- und Nicht-Unicode-Datentypen müssen Sie das Szenario testen und die Leistungsunterschiede in Ihrer Umgebung messen. Es ist ratsam, die Sortierung zu standardisieren, die für die Systeme in Ihrem Unternehmen verwendet wird, und so weit wie möglich Unicode-Server und -Clients bereitzustellen. Weitere Informationen zu Unicode finden Sie auf der Website des Unicode Consortium.

In vielen Fällen interagiert SQL Server mit anderen Servern oder Clients, und Ihr Unternehmen verwendet möglicherweise mehrere Standards für den Datenzugriff zwischen Anwendungen und Serverinstanzen. SQL Server-Clients stellen einen der beiden Haupttypen dar:

  • Unicode-Clients, die OLE DB und Open Database Connectivity (ODBC), Version 3.7 oder höher, verwenden.

  • Nicht-Unicode-Clients, die DB Library und ODBC, Version 3.6 oder älter, verwenden.

Die folgende Tabelle enthält Informationen zur Verwendung mehrsprachiger Daten mit verschiedenen Kombinationen von Unicode- und Nicht-Unicode-Servern.

Server

Client

Vorteile oder Beschränkungen

Unicode

Unicode

Da Unicode-Daten im gesamten System verwendet werden, verfügt dieses Szenario über die beste Systemleistung und den besten Schutz vor Beschädigung der abgerufenen Daten. Dies ist der Fall bei ActiveX Data Objects (ADO), OLE DB und ODBC, Version 3.7 oder höher.

Unicode

Nicht-Unicode

In diesem Szenario sind Einschränkungen oder Fehler beim Verschieben von Daten auf einen Clientcomputer möglich. Dies gilt besonders für Verbindungen zwischen einem Server, auf dem ein neueres Betriebssystem ausgeführt wird, und einem Client, auf dem eine ältere Version von SQL Server oder ein älteres Betriebssystem installiert ist. Die Unicode-Daten auf dem Server versuchen, eine Zuordnung zu einer entsprechenden Codeseite auf dem Nicht-Unicode-Client zu erstellen, um die Daten zu konvertieren.

Nicht-Unicode

Unicode

Dies ist keine günstige Konfiguration bei der Verwendung mehrsprachiger Daten Sie sind nicht in der Lage, Unicode-Daten auf den Nicht-Unicode-Server zu schreiben. Es ist wahrscheinlich, dass Probleme auftreten, wenn Daten an Server gesendet werden, die von der Codepage des Servers nicht erfasst werden.

Nicht-Unicode

Nicht-Unicode

Dieses Szenario ist bei mehrsprachigen Daten mit zahlreichen Beschränkungen verbunden. Sie können nur eine Codepage verwenden.

Wenn beim Verschieben von Daten von einem Server auf einen Client Fehler oder Probleme auftreten (speziell beim Verschieben von einem Unicode-Server auf einen Nicht-Unicode-Client), erkennen ältere Clienttreiber möglicherweise die Serversortierung nicht. In diesem Fall besteht die beste Möglichkeit, dieses Problem zu beheben, ggf. in einem Update des Clientbetriebssystems, wobei die zugrunde liegenden Systemsortierungen aktualisiert werden. Wenn auf dem Client Datenbankclient-Software installiert ist, sollten Sie ein Serviceupdate der Datenbankclient-Software in Erwägung ziehen.

Sie können auch versuchen, eine andere Sortierung für die Daten auf dem Server zu verwenden. Wählen Sie eine Sortierung aus, die einer Codepage auf dem Client zugeordnet werden kann. Weitere Informationen zum Ändern von Sortierungen finden Sie im Thema "Festlegen und Ändern von Sortierungen in SQL Server" in der SQL Server-Onlinedokumentation. Weitere Informationen zur Änderung von Sortierungen finden Sie im Whitepaper mit der empfohlenen Vorgehensweise zur Sortierungsänderung in SQL Server. Weitere Informationen zur Migration von Nicht-Unicode-Datentypen in Unicode finden Sie im Whitepaper mit der empfohlenen Vorgehensweise zur Unicode-Migration in SQL Server.

Verwandte Themen:Grundlagen zu Unicode

Zurück zum Anfang

Codepage

Eine Codepage ist ein geordneter Satz von Zeichen in einem vorgegebenen Skript, in dem ein numerischer Index, oder Codepunktwert, mit jedem Zeichen verbunden ist. Eine Codepage in Windows wird meist als Zeichensatz oder charset bezeichnet. Codepages werden zur Unterstützung der Zeichensätze und Tastaturlayouts verschiedener Windows-Systemgebietsschemas verwendet.

Alle Windows Server 2008-Unicode-Sortierungen basieren auf Unicode 5.0.

Zurück zum Anfang

Datentypen

Ein Datentyp definiert Folgendes: einen Wertebereich, die Vorgänge, die mit den Werten ausgeführt werden können, und die Art und Weise, auf die die Werte im Arbeitsspeicher gespeichert werden. Durch die Definition eines Datentyps kann SQL Server Daten erwartungsgemäß bearbeiten. Nicht-Unicode-Zeichendatentypen sind char, varchar und text. Unicode-Datentypen sind nchar, nvarchar und ntext. Es ist ratsam, in Ihren Anwendungen den Unicode-Datentypen den Vorzug zu geben, besonders wenn Sie Zeichendaten für mehrere Sprachen speichern.

Weitere Informationen zur Migration von Nicht-Unicode-Datentypen in Unicode finden Sie im Whitepaper mit der empfohlenen Vorgehensweise zur Unicode-Migration in SQL Server.

Verwandte Themen:Datentypen (Datenbankmodul), Datentypen (Transact-SQL), SQL Server Integration Services-Datentypen

Zurück zum Anfang

Sortierreihenfolge

Die Sortierreihenfolge gibt an, wie Datenwerte sortiert werden. Dies wirkt sich auf die Ergebnisse des Datenvergleichs aus. Daten werden mithilfe von Sortierungen sortiert, die mit Indizes optimiert werden können.

Verwandte Themen:Sortierarten für Windows-Sortierung, Indizes

Zurück zum Anfang