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
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.