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

Wahre Länge eines Strings, wie von Oracle gesehen

Sie können, wie andere gezeigt haben, den Java-String mit dem Zeichensatz der Oracle-Datenbank in ein Byte-Array konvertieren und daraus dann die Länge in Bytes abrufen. Das setzt jedoch voraus, dass Sie den Zeichensatz Ihrer Datenbank kennen – unterschiedliche Datenbanken haben unterschiedliche Zeichensätze, was zu unterschiedlichen Byte-Längen für denselben String in unterschiedlichen Zeichensätzen führt.

Angenommen, Ihre Datenbank verwendet einen Zeichensatz mit variabler Breite wie UTF-8 (NLS_CHARACTERSET von AL32UTF8), können Sie Spalten in Oracle auch basierend auf der Zeichenlänge statt der Bytelänge deklarieren. Das kann Ihren Code vereinfachen, da Sie einfach die Zeichenlänge Ihrer Zeichenfolge überprüfen können. Es vereinfacht auch die Kommunikation für die Benutzer. Für Benutzer ist es im Allgemeinen schwer zu verstehen, warum ein Feld manchmal 5 Zeichen speichern kann, während es manchmal eine Zeichenfolge mit 2 Zeichen ablehnt, abhängig von den Zeichen, die Teil der Zeichenfolge sind (1 Zeichen im UTF-8-Zeichensatz kann bis zu 3 Bytes erfordern Speicherplatz).

Standardmäßig, wenn Sie eine Spalte deklarieren

CREATE TABLE foo (
  col_name VARCHAR2(5)
);

die Oracle anweist, bis zu 5 Byte Daten zuzulassen. Wenn Sie jedoch unabhängig von der Anzahl der Bytes 5 Datenzeichen zulassen möchten, können Sie die Zeichenlängensemantik verwenden

CREATE TABLE foo (
  col_name VARCHAR2(5 CHAR)
);

Angenommen, Sie möchten dies für alle Ihre Tabellen tun, während Sie Ihre DDL ausführen, können Sie auch nls_length_semantics festlegen auf Sitzungsebene, bevor Sie Ihre DDL

ausführen
ALTER SESSION SET nls_length_semantics = CHAR;

CREATE TABLE foo (
  col_name VARCHAR2(5)
);

erstellt eine Tabelle mit einer Spalte, die bis zu 5 Zeichen Daten zulässt.