Du kan, som andra har visat, konvertera Java-strängen till en byte-array med hjälp av Oracle-databasens teckenuppsättning och sedan få längden i byte från det. Det beror dock på att du vet vad din databas teckenuppsättning är - olika databaser kommer att ha olika teckenuppsättningar vilket kommer att resultera i olika bytelängder för samma sträng i olika teckenuppsättningar.
Förutsatt att din databas använder en teckenuppsättning med variabel bredd som UTF-8 (NLS_CHARACTERSET
av AL32UTF8) kan du också deklarera kolumner i Oracle baserat på teckenlängden snarare än bytelängden. Det kan förenkla din kod eftersom du bara kan kontrollera teckenlängden på din sträng. Det förenklar också kommunikationen för användarna. Det är i allmänhet svårt för användare att förstå varför ett fält ibland kan lagra 5 tecken medan det andra gånger avvisar en sträng med 2 tecken beroende på de tecken som ingår i strängen (1 tecken i teckenuppsättningen UTF-8 kan kräva upp till 3 byte lagringsutrymme).
Som standard när du deklarerar en kolumn
CREATE TABLE foo (
col_name VARCHAR2(5)
);
som talar om för Oracle att tillåta upp till 5 byte data. Om du vill tillåta 5 tecken med data oavsett antalet byte kan du dock använda teckenlängdssemantik
CREATE TABLE foo (
col_name VARCHAR2(5 CHAR)
);
Förutsatt att du vill göra detta för alla dina tabeller medan du kör din DDL, kan du också ställa in nls_length_semantics
på sessionsnivå innan du kör din DDL
ALTER SESSION SET nls_length_semantics = CHAR;
CREATE TABLE foo (
col_name VARCHAR2(5)
);
skapar en tabell med en kolumn som tillåter upp till 5 tecken med data.