Problém
Při popisu VARCHAR byste měli dodat jednotku, např. VARCHAR2(200 BYTE)
nebo VARCHAR2(200 CHAR)
. Pokud jednotku vynecháte, výchozí je BYTE
(viz Koncepty databáze Oracle, kapitola Datové typy Oracle ). Zdá se, že jde o drobný detail, ale stává se poměrně závažným, když máte vícebajtové znakové sady.
Situace do 11 g
Bohužel existuje pevný limit na maximální velikost sloupce VARCHAR2. Je to 4000 BYTE (!) (viz Referenční příručka databáze Oracle, kapitola Datové typy Oracle ) až po Oracle 11g a . Toto je tvrdý limit a neexistuje způsob, jak to obejít. Jediný způsob, jak to obejít, je sloupec CLOB.
Řešení pro 12c
Na Oracle 12c je situace jiná. Zde můžete použít parametr MAX_STRING_SIZE = EXTENDED
zvýšit limit až na 32 767 BYTE (viz Referenční jazyk databáze Oracle, kapitola Typy dat
a Oracle Database Reference, kapitola Parametry inicializace ). Zřejmé řešení tedy zní:Upgradujte na Oracle 12c, nastavte MAX_STRING_SIZE = EXTENDED
podle dokumentace
a změňte definici tabulky. Při změně tabulky můžete ztratit některé indexy, protože dříve na 12c not indexy nemohly obsahovat hodnoty VARCHAR2 s více než 4000 BYTE a stále mohou existovat určitá omezení. (Musím zkontrolovat problém s indexy a zda jej lze opravit přebudováním indexů).
Řešení:Změňte kódování databáze
Můžete zkusit změnit kódování své nativní databáze (způsob, jakým vaše databáze mapuje znaky CHAR na BYTE). K tomu obvykle musíte vytvořit novou databázi a poskytnout vhodný parametr pro NLS_CHARACTERSET. Jedná se o velmi velkou změnu ve fungování databáze a může mít několik vedlejších účinků. Pokud se někdy pokusíte přidat znaky v jiném kódování, můžete mít smůlu (tj. nemůžete je uložit do databáze). Toto řešení bych tedy nenavrhoval.
Řešení:Přepněte na CLOB
Obvykle není nutné zadávat libovolné dotazy na tak velká textová pole. Můžete zkusit identifikovat dotazy, které vybírají ve velkém textovém sloupci, a migrovat je do Oracle Text na sloupci CLOB. Ale to je velmi velká změna a nemusí být možná s vaším stávajícím schématem nebo vaší aplikací. Můžete skončit se spoustou spouštěčů „MÍSTO“ a s některými chybějícími kontrolami omezení (včetně nově vytvořeného sloupce CLOB).
Řešení:Použijte XML
Místo CLOB můžete zkusit uložit svůj řetězec jako sloupec XML. Maximální velikost těchto zařízení je 4 GB. Poškodí to váš výkon, budete muset poskytovat MÍSTO spouštěčů a možná ztratíte některá omezení, ale mohlo by vám to fungovat.