Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Definieren eines Zeichensatzes für eine Spalte Für Oracle-Datenbanktabellen

Die einfache Antwort ist, dass Zeichensätze im Gegensatz zu MySQL nicht unter Spalten- (oder Tabellen-) Ebene . Latein1 ist auch kein gültiger Oracle-Zeichensatz.

Zeichensätze sind in der gesamten Datenbank konsistent und wurden beim Erstellen der Datenbank angegeben. Sie können Ihren Charakter finden, indem Sie NLS_DATABASE_PARAMETERS ,

select value
  from nls_database_parameters
 where parameter = 'NLS_CHARACTERSET'

Die vollständige Liste der möglichen Zeichensätze ist für 11g verfügbar r2 und für 9i oder Sie können V$NLS_VALID_VALUES .

Es ist möglich, den ALTER SESSION zu verwenden Erklärung um die NLS_LANGUAGE einzustellen oder das NLS_TERRITORY , aber leider können Sie dies nicht für den Zeichensatz tun. Ich glaube, das liegt daran, dass das Ändern der Sprache die Anzeige von Oracle ändert die gespeicherten Daten, während eine Änderung des Zeichensatzes die Speicherung von Oracle ändern würde die Daten.

Bei der Anzeige der Daten können Sie natürlich den gewünschten Zeichensatz in jedem Client angeben, den Sie verwenden.

Zeichensatzmigration ist keine triviale Aufgabe und sollte nicht auf die leichte Schulter genommen werden.

Nebenbei bemerkt, warum versuchen Sie, Latin 1 zu verwenden? Es wäre normaler, eine neue Datenbank in etwas wie UTF-8 (auch bekannt als AL32UTF8) einzurichten - Verwenden Sie kein UTF8 ) oder UTF-16, damit Sie Multibyte-Daten effektiv speichern können. Auch wenn Sie es jetzt nicht brauchen, ist es ratsam, zu versuchen - ohne Garantien im Leben - Ihre Datenbank zukunftssicher zu machen, ohne dass Sie in Zukunft migrieren müssen.

Wenn Sie unterschiedliche Zeichensätze für verschiedene Spalten in einer Datenbank angeben möchten, wäre es besser, festzustellen, ob diese Anforderung wirklich erforderlich ist, und zu versuchen, sie zu entfernen. Wenn es unbedingt erforderlich ist, verwenden Sie am besten einen Zeichensatz, der eine Obermenge aller potenziellen Zeichensätze darstellt. Verwenden Sie dann eine Art Check-Einschränkung, die die Spalte auf bestimmte Hex-Werte beschränkt. Ich würde das überhaupt nicht empfehlen, das Fehlerpotential ist enorm und es ist extrem komplex. Darüber hinaus geben unterschiedliche Zeichensätze unterschiedliche Hex-Werte unterschiedlich wieder. Dies wiederum bedeutet, dass Sie erzwingen müssen, dass eine Spalte in einem bestimmten Zeichen gerendert wird, was unmöglich ist, da es außerhalb des Geltungsbereichs der Datenbank liegt.

1. Mich würde die Situation interessieren