Můžete, jak ukázali jiní, převést řetězec Java na bajtové pole pomocí znakové sady databáze Oracle a poté z toho získat délku v bajtech. To však závisí na znalosti, jaká je znaková sada vaší databáze – různé databáze budou mít různé znakové sady, což bude mít za následek různé délky bajtů pro stejný řetězec v různých znakových sadách.
Za předpokladu, že vaše databáze používá znakovou sadu s proměnnou šířkou, jako je UTF-8 (NLS_CHARACTERSET
AL32UTF8), můžete také deklarovat sloupce v Oracle na základě délky znaků, nikoli délky bajtů. To může zjednodušit váš kód, protože stačí zkontrolovat délku znaků vašeho řetězce. Uživatelům také zjednodušuje komunikaci. Pro uživatele je obecně těžké pochopit, proč může pole někdy uložit 5 znaků, zatímco jindy odmítne 2znakový řetězec v závislosti na znacích, které jsou součástí řetězce (1 znak ve znakové sadě UTF-8 může vyžadovat až 3 bajty úložiště).
Ve výchozím nastavení, když deklarujete sloupec
CREATE TABLE foo (
col_name VARCHAR2(5)
);
to říká Oracle, aby povolil až 5 bajtů dat. Pokud však chcete povolit 5 znaků dat bez ohledu na počet bajtů, můžete použít sémantiku délky znaků
CREATE TABLE foo (
col_name VARCHAR2(5 CHAR)
);
Za předpokladu, že to chcete udělat pro všechny tabulky při spuštění DDL, můžete také nastavit nls_length_semantics
na úrovni relace před spuštěním DDL
ALTER SESSION SET nls_length_semantics = CHAR;
CREATE TABLE foo (
col_name VARCHAR2(5)
);
vytvoří tabulku se sloupcem, který umožňuje až 5 znaků dat.