Można, jak pokazali inni, przekonwertować ciąg Java na tablicę bajtów przy użyciu zestawu znaków bazy danych Oracle, a następnie uzyskać z tego długość w bajtach. Polega to jednak na znajomości zestawu 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 łańcucha w różnych zestawach znaków.
Zakładając, że Twoja baza danych używa zestawu znaków o zmiennej szerokości, takiego jak UTF-8 (NLS_CHARACTERSET
z AL32UTF8), można również deklarować 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ść ciągu znaków. Upraszcza również komunikację dla użytkowników. Ogólnie użytkownikom trudno jest zrozumiećdlaczego pole może czasami przechowywać 5 znaków a innym razem odrzuca 2 znakowy ciąg w zależności od znaków wchodzących w jego skład (1 znak w zestawie znaków UTF-8 może wymagaćdo 3 bajtów pamięci).
Domyślnie, kiedy deklarujesz kolumnę
CREATE TABLE foo (
col_name VARCHAR2(5)
);
który mówi Oracle, aby zezwolić na maksymalnie 5 bajtów danych. Jeśli chcesz zezwolić na 5 znaków danych niezależnie od liczby bajtów, możesz użyć semantyki długości znaków
CREATE TABLE foo (
col_name VARCHAR2(5 CHAR)
);
Zakładając, że chcesz to zrobić dla wszystkich tabel podczas uruchamiania DDL, możesz również ustawić nls_length_semantics
na poziomie sesji przed uruchomieniem DDL
ALTER SESSION SET nls_length_semantics = CHAR;
CREATE TABLE foo (
col_name VARCHAR2(5)
);
tworzy tabelę z kolumną, która pozwala na do 5 znaków danych.