sql >> Databasteknik >  >> RDS >> Oracle

Sann längd på en sträng, sett av Oracle

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.



  1. SQL, hjälptalstabell

  2. Distribuerar MySQL Galera Cluster 4.0 på Amazon AWS EC2

  3. SQL ansluter

  4. mysql root lösenord glömt