none
Internationale Collation.... RRS feed

  • Frage

  • Hallo,

    kann mir bitte jemand sagen welche Collation eine MSSQL 2008 datenbank haben

    muss damit sie "Unicode" fähig ist bzw. auch Ost Europäische Zeichen Unterstützt?

    SQL_Latin1_General_CP850_BIN2 ?

    Danke

    Gerhard

    Dienstag, 1. Juni 2010 10:06

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
    Dienstag, 1. Juni 2010 12:14
  • 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
    Dienstag, 1. Juni 2010 10:34
  • 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
    Dienstag, 1. Juni 2010 13:41
    Beantworter

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
    Dienstag, 1. Juni 2010 10:34
  • Hallo Olaf,

    Vielen Dank für die Antwort aber mir ist nach wie vor nicht klar

    welchen Zeichensatz ich den jetzt am Besten Verwenden sollte für Ost Europäische länder.

    lg

    Gerhard

    Dienstag, 1. Juni 2010 11:35
  • 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
    Dienstag, 1. Juni 2010 12:14
  • 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
    Dienstag, 1. Juni 2010 13:41
    Beantworter