Benutzer mit den meisten Antworten
Internationale Collation....

Frage
Antworten
-
Hallo Gerhard,
der Zeichensatz hat damit wirklich nichts zu tun, wenn Du es als Unicode abspeicherst, hast Du die Daten auch als solches. Du kannst in einer Tabelle osteuropäische, sowie asiatische und auch arabische Zeichen abspeichern, egal welche Collation eingestellt ist; es wirkt sich nur auf die Sortierung und CS/CI aus.
Die "Beste" Collation gibt es wie üblich nicht. Wie Du unter SQL-Sortierungsname (Transact-SQL) sehen kannst, gibt es für jede Sprache eine Collation; Ost-europäisch ist nicht dabei. Wir verwenden SQL_Latin1_General_CP1_CI_AS und kommen mit polnischen Zeichen damit gut klar.
Wirklich wichtig ist erst mal, ob CS oder CI, das hat großen Einfluß. Legst Du z.B. die ganze DB gleich mit einer CS Collation an, dann folgen auch die Systemtabellen diesen Regel und somit musst Du dann auch bei Objekt-Namen wie Tabellen auf Groß-/Kleinschreibung achten. Bestes Beispiel ist die AdventureWorks, die ist CS.
Im übrigen ist die Collation nicht in Stein gemeisselt, um abweichend zu sortieren, kannst Du die Collation auch casten. Schönes Beispiel ist da immer German_Phonebook, die ja ganz besonderen Regeln folgt:
SELECT *
FROM (SELECT 'Schuessler' AS Nachname
UNION ALL SELECT 'Schüssler'
UNION ALL SELECT 'Schufler') AS SUB
ORDER BY SUB.Nachname COLLATE German_PhoneBook_CI_AS
SELECT *
FROM (SELECT 'Schuessler' AS Nachname
UNION ALL SELECT 'Schüssler'
UNION ALL SELECT 'Schufler') AS SUB
ORDER BY SUB.Nachname COLLATE SQL_Latin1_General_CP1_CI_AS
Zwei gleiche Selects mit unterschiedlichem Ergebnis durch die Collation.
Siehe auch noch mal MSDN:
Name der Windows-Sortierreihenfolge (Transact-SQL)
SQL-Sortierungsname (Transact-SQL)
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de- Als Antwort vorgeschlagen Elmar Boye Dienstag, 1. Juni 2010 13:47
- Als Antwort markiert Andrei Talmaciu Freitag, 4. Juni 2010 11:16
-
Hallo Gerhard,
eine "Datenbank", genauer gesagt Felder einer Tabelle, werden dadurch Unicode-fähig, das die Datentypen NVarchar/NChar stat Varchar/Char verwendet werden.
Die Collation wiederum ist dafür verantworlich, wie die einzelnen Zeichen bei der Sortierung berücksichtigt werden und auch, ob sie Case Senstive / Insensitve sind.
Siehe z.B. MSDN:SQL Server Collation Fundamentals, Using Unicode Data, Arbeiten mit Unicode Daten
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de- Als Antwort vorgeschlagen Elmar Boye Dienstag, 1. Juni 2010 11:13
- Als Antwort markiert Andrei Talmaciu Freitag, 4. Juni 2010 11:16
-
Hallo Olaf,
ich würde aber nicht mehr zu einer SQL-Sortierung raten, sondern lieber direkt mit einer Windows-Sortierung anfangen:
http://msdn.microsoft.com/de-de/library/ms143508(v=SQL.90).aspx
SQL-Sortierungen
Die Option SQL-Sortierungen wird aus Gründen der Kompatibilität mit früheren Versionen von SQL Server verwendet. Wählen Sie diese Option aus, um die Einstellungen an SQL Server 2000, SQL Server 7.0 oder einer früheren Version anzugleichen.
Damit wären wir bei Latin1_General_CI_AS.
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
http://www.insidesql.org- Als Antwort vorgeschlagen Elmar Boye Dienstag, 1. Juni 2010 13:47
- Als Antwort markiert Andrei Talmaciu Freitag, 4. Juni 2010 11:16
Alle Antworten
-
Hallo Gerhard,
eine "Datenbank", genauer gesagt Felder einer Tabelle, werden dadurch Unicode-fähig, das die Datentypen NVarchar/NChar stat Varchar/Char verwendet werden.
Die Collation wiederum ist dafür verantworlich, wie die einzelnen Zeichen bei der Sortierung berücksichtigt werden und auch, ob sie Case Senstive / Insensitve sind.
Siehe z.B. MSDN:SQL Server Collation Fundamentals, Using Unicode Data, Arbeiten mit Unicode Daten
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de- Als Antwort vorgeschlagen Elmar Boye Dienstag, 1. Juni 2010 11:13
- Als Antwort markiert Andrei Talmaciu Freitag, 4. Juni 2010 11:16
-
Hallo Gerhard,
der Zeichensatz hat damit wirklich nichts zu tun, wenn Du es als Unicode abspeicherst, hast Du die Daten auch als solches. Du kannst in einer Tabelle osteuropäische, sowie asiatische und auch arabische Zeichen abspeichern, egal welche Collation eingestellt ist; es wirkt sich nur auf die Sortierung und CS/CI aus.
Die "Beste" Collation gibt es wie üblich nicht. Wie Du unter SQL-Sortierungsname (Transact-SQL) sehen kannst, gibt es für jede Sprache eine Collation; Ost-europäisch ist nicht dabei. Wir verwenden SQL_Latin1_General_CP1_CI_AS und kommen mit polnischen Zeichen damit gut klar.
Wirklich wichtig ist erst mal, ob CS oder CI, das hat großen Einfluß. Legst Du z.B. die ganze DB gleich mit einer CS Collation an, dann folgen auch die Systemtabellen diesen Regel und somit musst Du dann auch bei Objekt-Namen wie Tabellen auf Groß-/Kleinschreibung achten. Bestes Beispiel ist die AdventureWorks, die ist CS.
Im übrigen ist die Collation nicht in Stein gemeisselt, um abweichend zu sortieren, kannst Du die Collation auch casten. Schönes Beispiel ist da immer German_Phonebook, die ja ganz besonderen Regeln folgt:
SELECT *
FROM (SELECT 'Schuessler' AS Nachname
UNION ALL SELECT 'Schüssler'
UNION ALL SELECT 'Schufler') AS SUB
ORDER BY SUB.Nachname COLLATE German_PhoneBook_CI_AS
SELECT *
FROM (SELECT 'Schuessler' AS Nachname
UNION ALL SELECT 'Schüssler'
UNION ALL SELECT 'Schufler') AS SUB
ORDER BY SUB.Nachname COLLATE SQL_Latin1_General_CP1_CI_AS
Zwei gleiche Selects mit unterschiedlichem Ergebnis durch die Collation.
Siehe auch noch mal MSDN:
Name der Windows-Sortierreihenfolge (Transact-SQL)
SQL-Sortierungsname (Transact-SQL)
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de- Als Antwort vorgeschlagen Elmar Boye Dienstag, 1. Juni 2010 13:47
- Als Antwort markiert Andrei Talmaciu Freitag, 4. Juni 2010 11:16
-
Hallo Olaf,
ich würde aber nicht mehr zu einer SQL-Sortierung raten, sondern lieber direkt mit einer Windows-Sortierung anfangen:
http://msdn.microsoft.com/de-de/library/ms143508(v=SQL.90).aspx
SQL-Sortierungen
Die Option SQL-Sortierungen wird aus Gründen der Kompatibilität mit früheren Versionen von SQL Server verwendet. Wählen Sie diese Option aus, um die Einstellungen an SQL Server 2000, SQL Server 7.0 oder einer früheren Version anzugleichen.
Damit wären wir bei Latin1_General_CI_AS.
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
http://www.insidesql.org- Als Antwort vorgeschlagen Elmar Boye Dienstag, 1. Juni 2010 13:47
- Als Antwort markiert Andrei Talmaciu Freitag, 4. Juni 2010 11:16