Die türkische Sprache kennt zwei Formen des Buchstabens, der uns als I erscheint. Eine Form, genannt I-dot, erscheint folgendermaßen:
Die zweite Form, genannt I-no-dot, erscheint folgendermaßen:
Auch wenn diese beiden Buchstaben als Varianten ein und desselben Buchstabens erscheinen, werden sie im türkischen Alphabet als verschiedene Buchstaben behandelt. SQL Anywhere stellt die türkische Kollatierung 1254TRK zur Verfügung, um diese Variationen zu unterstützen.
Die türkischen Regeln für die Groß-/Kleinschreibungs-Konvertierung sind nicht kompatibel mit den entsprechenden ANSI SQL-Standardregeln.
Im Türkischen ist z.B. das Kleinbuchstaben-Äquivalent von I
:
Im ANSI-Standard dagegen ist es:
Aus diesem Grunde hängt die korrekte Groß-/Kleinschreibungs-Konvertierung davon ab, ob für den zu vergleichenden Text türkisches oder englisches ANSI festgelegt ist. In vielen Fällen ist es nicht möglich diese Unterscheidung zu treffen, was in den betroffenen Datenbanken zu nicht standardmäßigem Verhalten führt.
Nehmen wir z.B. folgende Anweisungen, die in einer Datenbank ausgeführt werden, die die 1254TRK-Kollatierung verwendet:
Die erste Anweisung referenziert ein Systemobjekt, und ANSI SQL-Konvertierungsregeln sind für die Namensabgleichung erforderlich. Die zweite Anweisung referenziert ein Benutzerobjekt, und türkische Konvertierungsregeln sind für die Namensabgleichung erforderlich. Der Datenbankserver kann jedoch erst bestimmen, welche Konvertierungsregeln er verwenden soll, wenn er erkennt, um welches Objekt es sich handelt. Dabei erkennt er das Objekt erst, wenn er weiß, welche Konvertierungsregeln er verwenden soll. Weder für System- noch für Benutzerobjekte kann diese Situation zufriedenstellend aufgelöst werden. Da der Datenbankserver in diesem Beispiel die türkische Kollatierung 1254TRK verwendet, schlägt die erste Anweisung fehl, weil ein kleines "i" nicht als äquivalent zu einem großen "I" angesehen wird. Die zweite Anweisung führt zum Erfolg.
Die Inkompatibilität des türkischen Standards und des ANSI-Standards erfordert, dass Referenzen auf Systemobjekte in türkischen Datenbanken den Objektnamen korrekt in Groß- bzw. Kleinbuchstaben wiedergeben, d.h. so, wie bei der Erstellung des Objektes. Die erste Anweisung oben müsste folgendermaßen geschrieben werden:
Genau genommen muss nur der Buchstabe "I" in der korrekten Groß-/Kleinschreibung angegeben werden.
Als Alternative wäre es akzeptabel, wenn auch ungewöhnlich, die Anweisung folgendermaßen zu schreiben:
Bei Schlüsselwörtern wie INSERT wird die Groß-/Kleinschreibung auch in türkischen Datenbanken nicht berücksichtigt. SQL Anywhere weiß, dass alle Schlüsselwörter nur englische Buchstaben verwenden, daher werden ANSI-Konvertierungsregeln für die Groß-/Kleinschreibung bei der Abgleichung von Schlüsselwörtern verwendet. SQL Anywhere wendet dieses Wissen auch bei bestimmten anderen Bezeichnern an, wie z.B. bei integrierten Funktionen. Objekte, deren Namen im Katalog gespeichert werden, müssen jedoch in der korrekten Groß-/Kleinschreibung angegeben werden, wie oben beschrieben. Um die korrekte Schreibweise zu ermitteln, suchen Sie zunächst in der Systemansicht, die das Systemobjekt definiert.
Daten in türkischen Datenbanken, in denen die Groß-/Kleinschreibung nicht berücksichtigt wird
Alternative türkische Kollatierung 1254TRKALT
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |