sql >> Database teknologi >  >> RDS >> Oracle

Sand længde af en streng, som set af Oracle

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.



  1. Hvordan kan jeg udføre pl/pgsql-kode uden at oprette en funktion?

  2. Brug af RegEx i SQL Server

  3. bundle exec rake assets:precompile - databasekonfiguration specificerer ikke adapter

  4. Åbner Android Sqlite-databasen i fragment