sql >> Databáze >  >> RDS >> Oracle

Skutečná délka řetězce, jak ji vidí Oracle

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.



  1. Vypočítejte věk podle data narození

  2. SQL dotaz pro počítání změn hodnot ve sloupci

  3. MySQL vyhledávání necitlivé na diakritiku (arabština)

  4. Jak nastavit primární klíč automatického zvýšení v PostgreSQL?