Można, jak pokazali inni, przekonwertować ciąg znaków Java na tablicę bajtów przy użyciu zestawu znaków bazy danych Oracle, a następnie uzyskać w ten sposób długość w bajtach. Zależy to jednak od tego, jaki jest zestaw znaków twojej bazy danych - różne bazy danych będą miały różne zestawy znaków, co spowoduje różne długości bajtów dla tego samego ciągu znaków w różnych zestawach znaków.
Zakładając, że baza danych używa zestawu znaków o zmiennej szerokości, np. UTF-8 (NLS_CHARACTERSET
z AL32UTF8), można również zadeklarować kolumny w Oracle na podstawie długości znaków, a nie długości bajtów. To może uprościć twój kod, ponieważ możesz po prostu sprawdzić długość znaków twojego łańcucha. Upraszcza również komunikację dla użytkowników. Zwykle trudno jest zrozumieć, dlaczego pole może czasami przechowywać 5 znaków, podczas gdy innym razem odrzuca ciąg 2 znaków w zależności od znaków, które są częścią ciągu (1 znak w zestawie znaków UTF-8 może wymagać do 3 bajtów składowy).
Domyślnie, gdy zadeklarujesz kolumnę
CREATE TABLE foo (
col_name VARCHAR2(5)
);
który mówi Oracle pozwalają maksymalnie 5 bajtów danych. Jeśli chcesz, aby umożliwić 5 znaków danych niezależnie od liczby bajtów, jednak można użyć liczby znaków semantykę
CREATE TABLE foo (
col_name VARCHAR2(5 CHAR)
);
Zakładając, że chcesz to zrobić dla wszystkich tabel podczas prowadzenia DDL, można także ustawić nls_length_semantics
na poziomie sesji przed uruchomieniem swoją DDL
ALTER SESSION SET nls_length_semantics = CHAR;
CREATE TABLE foo (
col_name VARCHAR2(5)
);
tworzy tabelę z kolumną, która pozwala maksymalnie 5 znaków danych.
Musisz określić kodowanie podczas używania getBytes() w przeciwnym razie getBytes() będzie zależało od domyślnego kodowania systemu. – dimoniy