Du kan, som andre har vist, konvertere Java-strengen til et byte-array ved hjælp af Oracle-databasens tegnsæt og derefter få længden i bytes fra det. Det afhænger dog af at vide, hvad din databases tegnsæt er - forskellige databaser vil have forskellige tegnsæt, hvilket vil resultere i forskellige byte-længder for den samme streng i forskellige tegnsæt.
Forudsat at din database bruger et tegnsæt med variabel bredde som UTF-8 (NLS_CHARACTERSET
af AL32UTF8), kan du også erklære kolonner i Oracle baseret på tegnlængden i stedet for byte-længden. Det kan forenkle din kode, da du bare kan tjekke tegnlængden på din streng. Det forenkler også kommunikationen for brugerne. Det er generelt svært for brugere at forstå, hvorfor et felt nogle gange kan gemme 5 tegn, mens det andre gange afviser en streng på 2 tegn afhængigt af de tegn, der er en del af strengen (1 tegn i UTF-8-tegnsættet kan kræve op til 3 bytes lagerplads).
Som standard, når du erklærer en kolonne
CREATE TABLE foo (
col_name VARCHAR2(5)
);
der fortæller Oracle at tillade op til 5 bytes data. Hvis du vil tillade 5 tegn data uanset antallet af bytes, kan du dog bruge tegnlængde semantik
CREATE TABLE foo (
col_name VARCHAR2(5 CHAR)
);
Forudsat at du vil gøre dette for alle dine tabeller, mens du kører din DDL, kan du også indstille nls_length_semantics
på sessionsniveau, før du kører din DDL
ALTER SESSION SET nls_length_semantics = CHAR;
CREATE TABLE foo (
col_name VARCHAR2(5)
);
opretter en tabel med en kolonne, der tillader op til 5 tegn data.