Bei einem Wechsel von SQL 2005 [SQL_Latin1_General_CP1_CI_AS] nach 2008 verliere ich alle Funktionen, wenn ich die Abwärtskompatibilität verwende.

18

Wir wechseln von SQL 2005 [Instanz und Datenbank haben Kollatierung von SQL_Latin1_General_CP1_CI_AS] zu SQL 2008 [die Standardeinstellung ist Latin1_General_CI_AS].

Ich habe eine SQL 2008 R2-Installation abgeschlossen und die Standardsortierung verwendet Latin1_General_CI_AS, wobei die Wiederherstellung der Datenbank noch aktiv war SQL_Latin1_General_CP1_CI_AS. Die ausnahmslos auftretenden Probleme - die #temp-Tabellen, in denen sich die Datenbank Latin1_General_CI_ASbefand, SQL_Latin1_General_CP1_CI_ASund hier bin ich jetzt - Ich brauche jetzt Ratschläge zu den Fallstricken.

Bei der Installation von SQL 2008 R2, ich habe die Möglichkeit der Installation zu nutzen , 'SQL Collation, used for backwards compatibility'wo ich die Möglichkeit, die gleiche Sortierung wie die 2005 - Datenbank auszuwählen: SQL_Latin1_General_CP1_CI_AS.

  1. Dadurch kann ich keine Probleme mit # temporären Tabellen haben, aber gibt es Fallstricke?

  2. Würde ich Funktionen oder Features jeglicher Art verlieren, wenn ich keine "aktuelle" Sortierung von SQL 2008 verwende?

  3. Was ist, wenn wir (z. B. in 2 Jahren) von 2008 nach SQL 2012 wechseln? Habe ich dann Probleme?
  4. Würde ich irgendwann gezwungen sein, zu gehen Latin1_General_CI_AS?

  5. Ich habe gelesen, dass ein DBA-Skript die Zeilen mit vollständigen Datenbanken vervollständigt und dann das Einfügeskript mit der neuen Kollatierung in der Datenbank ausführt.

Peter PitLock
quelle
2
Wenn Sie der Meinung sind, dass Sie in SQL Server 2014 mit Hekaton vertraut werden, sollten Sie noch etwas anderes lesen .
Aaron Bertrand

Antworten:

20

Zunächst eine Entschuldigung für eine so lange Antwort, da ich das Gefühl habe, dass immer noch viel Verwirrung herrscht, wenn über Begriffe wie Kollatierung, Sortierreihenfolge, Codepage usw. gesprochen wird.

Von BOL :

Kollatierungen in SQL Server enthalten Sortierregeln, Groß- und Kleinschreibung und Eigenschaften für die Akzentempfindlichkeit Ihrer Daten . Kollatierungen, die mit Zeichendatentypen wie char und varchar verwendet werden, bestimmen die Codepage und die entsprechenden Zeichen, die für diesen Datentyp dargestellt werden können. Unabhängig davon, ob Sie eine neue Instanz von SQL Server installieren, eine Datenbanksicherung wiederherstellen oder den Server mit Client-Datenbanken verbinden, ist es wichtig, dass Sie die Anforderungen an das Gebietsschema, die Sortierreihenfolge sowie die Groß- und Kleinschreibung der Daten, mit denen Sie arbeiten, kennen .

Dies bedeutet, dass die Sortierung sehr wichtig ist, da sie Regeln für das Sortieren und Vergleichen von Zeichenfolgen der Daten festlegt.

Hinweis: Weitere Informationen zu COLLATIONPROPERTY

Jetzt lasst uns zuerst die Unterschiede verstehen ......

Laufen unter T-SQL:

SELECT *
FROM::fn_helpcollations()
WHERE NAME IN (
        'SQL_Latin1_General_CP1_CI_AS'
        ,'Latin1_General_CI_AS'
        )
GO

SELECT 'SQL_Latin1_General_CP1_CI_AS' AS 'Collation'
    ,COLLATIONPROPERTY('SQL_Latin1_General_CP1_CI_AS', 'CodePage') AS 'CodePage'
    ,COLLATIONPROPERTY('SQL_Latin1_General_CP1_CI_AS', 'LCID') AS 'LCID'
    ,COLLATIONPROPERTY('SQL_Latin1_General_CP1_CI_AS', 'ComparisonStyle') AS 'ComparisonStyle'
    ,COLLATIONPROPERTY('SQL_Latin1_General_CP1_CI_AS', 'Version') AS 'Version'

UNION ALL

SELECT 'Latin1_General_CI_AS' AS 'Collation'
    ,COLLATIONPROPERTY('Latin1_General_CI_AS', 'CodePage') AS 'CodePage'
    ,COLLATIONPROPERTY('Latin1_General_CI_AS', 'LCID') AS 'LCID'
    ,COLLATIONPROPERTY('Latin1_General_CI_AS', 'ComparisonStyle') AS 'ComparisonStyle'
    ,COLLATIONPROPERTY('Latin1_General_CI_AS', 'Version') AS 'Version'
GO

Die Ergebnisse wären:

Bildbeschreibung hier eingeben

Wenn Sie sich die obigen Ergebnisse ansehen, ist der einzige Unterschied die Sortierreihenfolge zwischen den beiden Kollatierungen. Dies ist jedoch nicht der Fall. Hier sehen Sie, warum:

Test 1:

--Clean up previous query
IF OBJECT_ID('Table_Latin1_General_CI_AS') IS NOT NULL
    DROP TABLE Table_Latin1_General_CI_AS;

IF OBJECT_ID('Table_SQL_Latin1_General_CP1_CI_AS') IS NOT NULL
    DROP TABLE Table_SQL_Latin1_General_CP1_CI_AS;

-- Create a table using collation Latin1_General_CI_AS 
CREATE TABLE Table_Latin1_General_CI_AS (
    ID INT IDENTITY(1, 1)
    ,Comments VARCHAR(50) COLLATE Latin1_General_CI_AS
    )

-- add some data to it 
INSERT INTO Table_Latin1_General_CI_AS (Comments)
VALUES ('kin_test1')

INSERT INTO Table_Latin1_General_CI_AS (Comments)
VALUES ('Kin_Tester1')

-- Create second table using collation SQL_Latin1_General_CP1_CI_AS 
CREATE TABLE Table_SQL_Latin1_General_CP1_CI_AS (
    ID INT IDENTITY(1, 1)
    ,Comments VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS
    )

-- add some data to it 
INSERT INTO Table_SQL_Latin1_General_CP1_CI_AS (Comments)
VALUES ('kin_test1')

INSERT INTO Table_SQL_Latin1_General_CP1_CI_AS (Comments)
VALUES ('Kin_Tester1')

--Now try to join both tables
SELECT *
FROM Table_Latin1_General_CI_AS LG
INNER JOIN Table_SQL_Latin1_General_CP1_CI_AS SLG ON LG.Comments = SLG.Comments
GO

Ergebnisse von Test 1:

Msg 468, Level 16, State 9, Line 35
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.

Aus den obigen Ergebnissen können wir ersehen, dass wir die Werte von Spalten mit unterschiedlichen Sortierungen nicht direkt vergleichen können. Sie müssen sie COLLATEzum Vergleichen der Spaltenwerte verwenden.

TEST 2:

Der Hauptunterschied ist die Leistung, wie Erland Sommarskog bei dieser Diskussion über msdn betont .

--Clean up previous query
IF OBJECT_ID('Table_Latin1_General_CI_AS') IS NOT NULL
    DROP TABLE Table_Latin1_General_CI_AS;

IF OBJECT_ID('Table_SQL_Latin1_General_CP1_CI_AS') IS NOT NULL
    DROP TABLE Table_SQL_Latin1_General_CP1_CI_AS;

-- Create a table using collation Latin1_General_CI_AS 
CREATE TABLE Table_Latin1_General_CI_AS (
    ID INT IDENTITY(1, 1)
    ,Comments VARCHAR(50) COLLATE Latin1_General_CI_AS
    )

-- add some data to it 
INSERT INTO Table_Latin1_General_CI_AS (Comments)
VALUES ('kin_test1')

INSERT INTO Table_Latin1_General_CI_AS (Comments)
VALUES ('kin_tester1')

-- Create second table using collation SQL_Latin1_General_CP1_CI_AS 
CREATE TABLE Table_SQL_Latin1_General_CP1_CI_AS (
    ID INT IDENTITY(1, 1)
    ,Comments VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS
    )

-- add some data to it 
INSERT INTO Table_SQL_Latin1_General_CP1_CI_AS (Comments)
VALUES ('kin_test1')

INSERT INTO Table_SQL_Latin1_General_CP1_CI_AS (Comments)
VALUES ('kin_tester1')

--- Erstellen Sie Indizes für beide Tabellen

CREATE INDEX IX_LG_Comments ON  Table_Latin1_General_CI_AS(Comments)
go
CREATE INDEX IX_SLG_Comments ON  Table_SQL_Latin1_General_CP1_CI_AS(Comments)

--- Führen Sie die Abfragen aus

DBCC FREEPROCCACHE
GO
SELECT Comments FROM Table_Latin1_General_CI_AS WHERE Comments = 'kin_test1'
GO

--- Dies hat eine IMPLICIT-Konvertierung zur Folge

Bildbeschreibung hier eingeben

--- Führen Sie die Abfragen aus

DBCC FREEPROCCACHE
GO
SELECT Comments FROM Table_SQL_Latin1_General_CP1_CI_AS WHERE Comments = 'kin_test1'
GO

--- Dies wird NICHT haben Implizite Konvertierung

Bildbeschreibung hier eingeben

Der Grund für die implizite Konvertierung liegt darin, dass ich meine Datenbank- und Server- Kollatierung sowohl als SQL_Latin1_General_CP1_CI_ASals auch in der Tabelle Table_Latin1_General_CI_AS die Spalte Comments definiert habe, wie VARCHAR(50)bei COLLATE Latin1_General_CI_AS , sodass SQL Server während der Suche eine IMPLICIT-Konvertierung durchführen muss.

Test 3:

Mit demselben Setup vergleichen wir jetzt die varchar-Spalten mit den nvarchar-Werten, um die Änderungen in den Ausführungsplänen zu sehen.

- Führen Sie die Abfrage aus

DBCC FREEPROCCACHE
GO
SELECT Comments FROM Table_Latin1_General_CI_AS WHERE Comments =  (SELECT N'kin_test1' COLLATE Latin1_General_CI_AS)
GO

Bildbeschreibung hier eingeben

- Führen Sie die Abfrage aus

DBCC FREEPROCCACHE
GO
SELECT Comments FROM Table_SQL_Latin1_General_CP1_CI_AS WHERE Comments = N'kin_test1'
GO

Bildbeschreibung hier eingeben

Beachten Sie, dass die erste Abfrage eine Indexsuche durchführen kann, jedoch eine implizite Konvertierung durchführen muss, während die zweite eine Indexsuche durchführt, die sich in Bezug auf die Leistung als ineffizient erweist, wenn große Tabellen durchsucht werden.

Fazit :

  • Alle oben genannten Tests zeigen, dass die richtige Sortierung für Ihre Datenbankserverinstanz sehr wichtig ist.
  • SQL_Latin1_General_CP1_CI_AS ist eine SQL-Kollatierung mit den Regeln, mit denen Sie Daten nach Unicode und Nicht-Unicode sortieren können.
  • Die SQL-Kollatierung kann Index nicht verwenden, wenn Unicode- und Nicht-Unicode-Daten verglichen werden. Dies wurde in den obigen Tests gezeigt. Beim Vergleich von nvarchar-Daten mit varchar-Daten wird ein Index-Scan durchgeführt und keine Suche durchgeführt.
  • Latin1_General_CI_AS ist eine Windows-Kollatierung mit den Regeln, mit denen Sie Daten sortieren können, die für Unicode und Nicht-Unicode gleich sind.
  • Die Windows-Kollatierung kann beim Vergleich von Unicode- und Nicht-Unicode-Daten weiterhin den Index verwenden (Indexsuche im obigen Beispiel), es wird jedoch ein geringer Leistungsverlust angezeigt.
  • Sehr zu empfehlen, die Antwort von Erland Sommarskog + die Verbindungselemente zu lesen, auf die er hingewiesen hat.

Dadurch kann ich keine Probleme mit # temporären Tabellen haben, aber gibt es Fallstricke?

Siehe meine Antwort oben.

Würde ich Funktionen oder Features jeglicher Art verlieren, wenn ich keine "aktuelle" Sortierung von SQL 2008 verwende?

Es hängt alles davon ab, auf welche Funktionen Sie sich beziehen. Beim Sortieren werden Daten gespeichert und sortiert.

Was ist, wenn wir (z. B. in 2 Jahren) von 2008 nach SQL 2012 wechseln? Habe ich dann Probleme? Würde ich irgendwann gezwungen sein, zu Latin1_General_CI_AS zu wechseln?

Kann nicht gutheißen! Da sich die Dinge ändern können und es immer gut ist, den Vorschlägen von Microsoft zu folgen, müssen Sie Ihre Daten und die oben erwähnten Fallstricke verstehen. Beachten Sie auch diese und diese Verbindungselemente.

Ich habe gelesen, dass ein DBA-Skript die Zeilen mit vollständigen Datenbanken vervollständigt und dann das Einfügeskript mit der neuen Kollatierung in der Datenbank ausführt.

Wenn Sie die Sortierung ändern möchten, sind solche Skripte hilfreich. Ich habe festgestellt, dass ich die Kollatierung von Datenbanken oft an die Kollatierung von Servern angeglichen habe, und ich habe einige Skripte, die das ziemlich ordentlich machen. Lass es mich wissen, wenn du es brauchst.

Verweise :

Kin Shah
quelle
5

Zusätzlich zu dem, was @Kin in seiner Antwort ausführlich darlegt , gibt es noch ein paar Dinge zu beachten, die beim Wechseln der Standardkollatierung des Servers (dh der Instanz) zu beachten sind (Elemente über der horizontalen Linie sind direkt relevant für die beiden in der Frage genannten Kollatierungen; Elemente unterhalb der waagerechten Linie sind für das Allgemeine relevant):

  • WENN DIE STANDARDKOLLATION IHRER DATENBANK NICHT ÄNDERT, sollte das in @ Kins Antwort beschriebene Leistungsproblem der "impliziten Konvertierung" kein Problem sein, da Zeichenfolgenliterale und lokale Variablen die Standardkollation der Datenbank verwenden, nicht die des Servers. Die einzigen Auswirkungen für das Szenario, in dem die Kollatierung auf Instanzebene geändert wird, jedoch nicht die Kollatierung auf Datenbankebene (beide werden nachstehend ausführlich beschrieben):

    • Mögliche Kollatierungskonflikte mit temporären Tabellen (aber nicht mit Tabellenvariablen).
    • Möglicherweise fehlerhafter Code, wenn die Groß- und Kleinschreibung von Variablen und / oder Cursorn nicht mit ihren Deklarationen übereinstimmt (dies kann jedoch nur passieren, wenn Sie zu einer Instanz mit einer binären Sortierung oder einer Sortierung mit Berücksichtigung der Groß- und Kleinschreibung wechseln).
  • Ein Unterschied zwischen diesen beiden Sortierungen besteht darin, wie sie bestimmte Zeichen für VARCHARDaten sortieren (dies wirkt sich nicht auf NVARCHARDaten aus). Die Nicht-EBCDIC- SQL_Kollatierungen verwenden die so genannte "Zeichenfolgensortierung" für VARCHARDaten, während alle anderen Kollatierungen und sogar NVARCHARDaten für die Nicht-EBCDIC- SQL_Kollatierungen die so genannte "Wortsortierung" verwenden. Der Unterschied besteht darin, dass bei "Wortsortierung" Bindestrich -und Apostroph '(und möglicherweise auch einige andere Zeichen?) Eine sehr geringe Gewichtung haben und im Wesentlichen ignoriert werden, sofern keine anderen Unterschiede in den Zeichenfolgen bestehen. Führen Sie Folgendes aus, um dieses Verhalten in Aktion zu sehen:

    DECLARE @Test TABLE (Col1 VARCHAR(10) NOT NULL);
    INSERT INTO @Test VALUES ('aa');
    INSERT INTO @Test VALUES ('ac');
    INSERT INTO @Test VALUES ('ah');
    INSERT INTO @Test VALUES ('am');
    INSERT INTO @Test VALUES ('aka');
    INSERT INTO @Test VALUES ('akc');
    INSERT INTO @Test VALUES ('ar');
    INSERT INTO @Test VALUES ('a-f');
    INSERT INTO @Test VALUES ('a_e');
    INSERT INTO @Test VALUES ('a''kb');
    
    SELECT * FROM @Test ORDER BY [Col1] COLLATE SQL_Latin1_General_CP1_CI_AS;
    -- "String Sort" puts all punctuation ahead of letters
    
    SELECT * FROM @Test ORDER BY [Col1] COLLATE Latin1_General_100_CI_AS;
    -- "Word Sort" mostly ignores dash and apostrophe

    Kehrt zurück:

    String Sort
    -----------
    a'kb
    a-f
    a_e
    aa
    ac
    ah
    aka
    akc
    am
    ar

    und:

    Word Sort
    ---------
    a_e
    aa
    ac
    a-f
    ah
    aka
    a'kb
    akc
    am
    ar

    Während Sie das "String Sort" -Verhalten "verlieren", bin ich mir nicht sicher, ob ich das als "Feature" bezeichnen würde. Es ist ein Verhalten, das als unerwünscht eingestuft wurde (was durch die Tatsache belegt wird, dass es in keiner der Windows-Kollatierungen vorgezogen wurde). Es ist jedoch ein deutlicher Unterschied im Verhalten zwischen den beiden Kollatierungen (ebenfalls nur für Nicht-EBCDIC- VARCHARDaten), und Sie haben möglicherweise Code- und / oder Kundenerwartungen, die auf dem Verhalten "String-Sortierung" basieren. Dazu muss der Code getestet und möglicherweise untersucht werden, ob sich diese Verhaltensänderung negativ auf die Benutzer auswirkt.

  • Ein weiterer Unterschied zwischen SQL_Latin1_General_CP1_CI_ASund Latin1_General_100_CI_ASist die Fähigkeit zu tun , Expansionen auf VARCHARDaten ( NVARCHARDaten können bereits diese tun für die meisten SQL_Sortierungen), wie Handhabung , æals wäre es ae:

    IF ('æ' COLLATE SQL_Latin1_General_CP1_CI_AS =
        'ae' COLLATE SQL_Latin1_General_CP1_CI_AS)
    BEGIN
      PRINT 'SQL_Latin1_General_CP1_CI_AS';
    END;
    
    IF ('æ' COLLATE Latin1_General_100_CI_AS =
        'ae' COLLATE Latin1_General_100_CI_AS)
    BEGIN
      PRINT 'Latin1_General_100_CI_AS';
    END;

    Kehrt zurück:

    Latin1_General_100_CI_AS

    Das Einzige, was Sie hier "verlieren", ist , dass Sie diese Erweiterungen nicht durchführen können. Im Allgemeinen ist dies ein weiterer Vorteil des Wechsels zu einer Windows-Kollatierung. Genau wie bei der Verschiebung von "String-Sortierung" zu "Wort-Sortierung" gilt jedoch die gleiche Vorsicht: Es handelt sich eindeutig um einen Unterschied zwischen den beiden Sortierungen (wiederum nur für VARCHARDaten), und Sie haben möglicherweise Code und / oder Kunden Erwartungen , basierend auf nicht diese Zuordnungen haben. Dazu muss der Code getestet und möglicherweise untersucht werden, ob sich diese Verhaltensänderung negativ auf die Benutzer auswirkt.

    (Zuerst in dieser SO-Antwort von @Zarepheth vermerkt: Kann SQL Server SQL_Latin1_General_CP1_CI_AS sicher in Latin1_General_CI_AS konvertiert werden? )

  • Die Sortierung auf Serverebene wird verwendet, um die Sortierung der Systemdatenbanken festzulegen, einschließlich [model]. Die [model]Datenbank wird als Vorlage zum Erstellen neuer Datenbanken verwendet, die [tempdb]bei jedem Serverstart erstellt werden. Aber selbst bei einer Änderung der Sortierung auf Serverebene, die die Sortierung von ändert [tempdb], gibt es eine einfache Möglichkeit, Sortierungsunterschiede zwischen der Datenbank, die "aktuell" ist, wenn sie CREATE #TempTableausgeführt wird, und zu korrigieren [tempdb]. Deklarieren Sie beim Erstellen temporärer Tabellen eine Kollatierung mit der COLLATEKlausel und geben Sie eine Kollatierung an mit DATABASE_DEFAULT:

    CREATE TABLE #Temp (Col1 NVARCHAR(40) COLLATE DATABASE_DEFAULT);

  • Es ist am besten, die neueste Version der gewünschten Kollatierung zu verwenden, wenn mehrere Versionen verfügbar sind. Ab SQL Server 2005 wurde eine "90" -Serie von Kollatierungen eingeführt, und SQL Server 2008 führte eine "100" -Serie von Kollatierungen ein. Sie können diese Kollatierungen mithilfe der folgenden Abfragen finden:

    SELECT * FROM sys.fn_helpcollations() WHERE [name] LIKE N'%[_]90[_]%'; -- 476
    
    SELECT * FROM sys.fn_helpcollations() WHERE [name] LIKE N'%[_]100[_]%'; -- 2686

    Da Sie mit SQL Server 2008 R2 arbeiten, sollten Sie Latin1_General_100_CI_ASanstelle von verwenden Latin1_General_CI_AS.

  • Ein Unterschied zwischen den Groß- und Kleinschreibung betreffenden Versionen dieser bestimmten Kollatierungen (dh SQL_Latin1_General_CP1_CS_ASund Latin1_General_100_CS_AS) liegt in der Reihenfolge von Groß- und Kleinschreibung bei der Sortierung nach Groß- und Kleinschreibung. Dies betrifft auch einzelne Zeichenklassenbereiche (dh [start-end]), die mit dem LIKEOperator und der PATINDEXFunktion verwendet werden können. Die folgenden drei Abfragen zeigen diesen Effekt sowohl für die Sortierung als auch für den Zeichenbereich:

    SELECT tmp.col AS [Upper-case first]
    FROM (VALUES ('a'), ('A'), ('b'), ('B'), ('c'), ('C')) tmp(col)
    WHERE tmp.col LIKE '%[A-C]%' COLLATE SQL_Latin1_General_CP1_CS_AS
    ORDER BY tmp.col COLLATE SQL_Latin1_General_CP1_CS_AS; -- Upper-case first
    
    SELECT tmp.col AS [Lower-case first]
    FROM (VALUES ('a'), ('A'), ('b'), ('B'), ('c'), ('C')) tmp(col)
    WHERE tmp.col LIKE '%[A-C]%' COLLATE Latin1_General_100_CS_AS
    ORDER BY tmp.col COLLATE Latin1_General_100_CS_AS; -- Lower-case first
    
    SELECT tmp.col AS [Lower-case first]
    FROM (VALUES (N'a'), (N'A'), (N'b'), (N'B'), (N'c'), (N'C')) tmp(col)
    WHERE tmp.col LIKE N'%[A-C]%' COLLATE SQL_Latin1_General_CP1_CS_AS
    ORDER BY tmp.col COLLATE SQL_Latin1_General_CP1_CS_AS; -- Lower-case first

    Die einzige Möglichkeit, Großbuchstaben vor Kleinbuchstaben zu sortieren (für denselben Buchstaben), besteht darin, eine der 31 Kollatierungen zu verwenden, die dieses Verhalten unterstützen, nämlich die Hungarian_Technical_*Kollatierungen und eine Handvoll SQL_Kollatierungen (die dieses Verhalten nur für VARCHARDaten unterstützen) ).

  • Weniger wichtig für diese spezielle Änderung, aber dennoch gut zu wissen, da dies Auswirkungen haben würde, wenn der Server auf eine binäre oder case-sensitive Sortierung umgestellt würde, ist, dass die Sortierung auf Serverebene sich auch auf Folgendes auswirkt:

    • lokale Variablennamen
    • CURSOR-Namen
    • GOTO-Labels
    • Namensauflösung des sysnameDatentyps


    Das heißt, wenn Sie oder "der Programmierer, der vor kurzem gegangen ist", der anscheinend für den ganzen schlechten Code verantwortlich ist ;-), sich nicht um die Groß- und Kleinschreibung gekümmert haben und eine Variable als deklariert, @SomethingIDaber später darauf verwiesen @somethingIdhaben, würde dies beim Umzug in eine Groß- und Kleinschreibung scheitern -sensitive oder binäre Kollation. In ähnlicher Weise wird Code, der den sysnameDatentyp verwendet, ihn aber als SYSNAME, SysNameoder etwas anderes als Kleinbuchstaben bezeichnet, ebenfalls unterbrochen, wenn er unter Verwendung von Groß- / Kleinschreibung oder binärer Sortierung in eine Instanz verschoben wird.

Solomon Rutzky
quelle