Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere Server - Datenbankadministration » Datenbankkonfiguration » Internationale Sprachen und Zeichensätze » Kollationen

 

Datenbankkollationen ändern

Sie können die Datenbankkollation von einer Kollation in eine andere ändern, indem Sie die Datenbank entladen und in die gewünschte Kollation neu laden. Kollationen werden zum Zeitpunkt der Datenbankerstellung gewählt und können nicht geändert werden, ohne die Datenbank neu aufzubauen.

Voraussetzungen

Sie müssen die Systemprivilegien SELECT ANY TABLE und SERVER OPERATOR haben.

Standardmäßig benötigen Sie zum Ausführen einer UNLOAD-Anweisung das SELECT ANY TABLE-Systemprivileg. Die erforderlichen Privilegien können mithilfe der Datenbankserveroption -gl geändert werden.

 Aufgabe
  1. Starten Sie die Datenbank:

    START databasefile 
  2. Ermitteln Sie folgendermaßen den Zeichensatz für die vorhandene Datenbank:

    SELECT DB_PROPERTY( 'CharSet' );

    Bei frühen Versionen von SQL Anywhere ist diese Eigenschaft möglicherweise nicht vorhanden. Der Zeichensatz ist aus dem Kollationsnamen ableitbar. Beispiel: 1252LATIN1-Kollation verwendet Codepage 1252.

    Der Zeichensatz in der vorhandenen Datenbank muss mit den Zeichensätzen von Betriebssystem und Client übereinstimmen oder zumindest kompatibel sein. Wenn dies nicht der Fall ist, bietet dies eine gute Gelegenheit, die Datenbank neu aufzubauen, was allerdings mit größter Umsicht geschehen muss.

    Insbesondere gilt: Wenn Sie eine Datenbank mit 1252LATIN1-Kollation in früheren Versionen von SQL Anywhere verwendet haben, die die Zeichensatzkonvertierung entweder nicht unterstützen (Version 5 und früher) oder standardmäßig deaktiviert haben (Versionen 6 und 7), und Ihre Clientanwendungen normale Windows-Anwendungen waren, haben Sie möglicherweise Codepage 1252-Zeichendaten in einer Datenbank, die Daten gemäß Codepage 850 interpretiert.

  3. Ermitteln Sie den Zeichensatz für die Daten in der vorhandenen Datenbank:

    UNLOAD TABLE mytable TO 'mytable-data-in-utf8.dat' ENCODING 'UTF-8';

    Zeigen Sie die Ergebnisse in einem Texteditor an.

    Wenn Daten mit Akzenten korrekt angezeigt werden, entsprechen die Zeichendaten in der Datenbank der ANSI-Codepage für Windows, die für Englisch und andere westeuropäische Sprachen Codepage 1252 ist. Wenn die Daten in einem DOS-basierten Editor korrekt angezeigt werden, entsprechen die Daten der OEM-Codepage für Windows, die wahrscheinlich 437 oder 850 ist.

  4. Entladen Sie die Datenbank.

    Wenn der Datenzeichensatz mit dem Zeichensatz der Datenbank inkompatibel ist, müssen die Daten unbedingt ohne Zeichensatzkonvertierung entladen werden. Je nachdem, mit welcher Version von SQL Anywhere Sie arbeiten, können Sie die interne Entladefunktion von dbunload verwenden oder die Daten mithilfe der UNLOAD TABLE-Anweisung manuell entladen.

  5. Erstellen Sie die neue Datenbank unter Angabe der Kollationen und Zeichensätze, die Sie verwenden möchten, und legen Sie DBA-Benutzer-ID und DBA-Kennwort auf "DBA" und "sql" fest:

    dbinit -dba DBA,sql -z 1252LATIN1 c:\newdatabase.db 
  6. Stoppen Sie den alten Datenbankserver und starten Sie den neuen Datenbankserver:

    dbsrv16 -n new-server c:\newdatabase.db 
  7. Laden Sie die Daten in die neue Datenbank.

    Wenn die entladenen Daten und das Schema (reload.sql) dem Zeichensatz des Computers entsprechen, auf dem das Neuladen durchgeführt wird, können Sie die externe Neuladefunktion von dbunload verwenden. Die Daten werden automatisch in den korrekten Datensatz für die Datenbank konvertiert. Zum Beispiel:

    dbunload -ix c:\databasefile

    Wenn die Kodierung der Daten nicht dem Zeichensatz der Datenbank entspricht und Sie die Daten mithilfe von LOAD TABLE-Anweisungen laden (internes Neuladen), müssen Sie die ENCODING-Klausel verwenden, weil der Datenbankserver standardmäßig keine Zeichensatzkonvertierung für Daten durchführt, die mit LOAD TABLE-Anweisungen geladen werden.

    Wenn die Kodierung der Daten nicht der Codepage auf dem Computer entspricht, mit dem Sie arbeiten, und Sie mithilfe von INPUT-Anweisungen laden (externes Neuladen), müssen Sie die ENCODING-Klausel verwenden, weil der Datenbankserver sonst annimmt, dass die Daten im systemeigenen Zeichensatz des Computers vorliegen.

Ergebnisse

Die Datenbank wird mit der neuen Kollation neu erstellt.

Beispiel

Nehmen Sie beispielsweise an, Sie haben eine Datenbank mit ISO1LATIN1-Kollation und stellen fest, dass Sie das Euro-Währungssymbol unterstützen müssen. Da ISO1LATIN1 im Gegensatz zu anderen europäischen Zeichensätzen wie 1252LATIN1 das Euro-Symbol nicht unterstützt, können Sie Ihre Datenbank entladen, eine neue Datenbank mit 1252LATIN1 erstellen und Ihre Datenbank neu laden.

Weitere Hinweise finden Sie unter [external link] Changing the Collation and Codepage When Rebuilding a SQL Anywhere Database.


 Siehe auch