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

Definování znakové sady pro sloupec Pro databázové tabulky Oracle

Jednoduchá odpověď je, že na rozdíl od MySQL nelze znakové sady definovat na úroveň sloupce (nebo tabulky) . Latin1 není platnou znakovou sadou Oracle.

Znakové sady jsou v celé databázi konzistentní a budou určeny při vytváření databáze. Svou postavu můžete najít dotazem na NLS_DATABASE_PARAMETERS ,

select value
  from nls_database_parameters
 where parameter = 'NLS_CHARACTERSET'

Úplný seznam možných znakových sad je k dispozici pro 11g r2 a pro 9i nebo se můžete zeptat na V$NLS_VALID_VALUES .

Je možné použít ALTER SESSION prohlášení pro nastavení NLS_LANGUAGE nebo NLS_TERRITORY , ale bohužel to nemůžete udělat pro znakovou sadu. Věřím, že je to proto, že změna jazyka změní to, jak by Oracle zobrazoval uložená data, zatímco změna znakové sady by změnila to, jak Oracle ukládá data.

Při zobrazování dat můžete samozřejmě specifikovat požadovanou znakovou sadu v jakémkoli klientovi, kterého používáte.

Migrace znakové sady není triviální úkol a neměl by být prováděn na lehkou váhu.

Na okraj, proč se snažíte používat latinku 1? Normálnější by bylo nastavit novou databázi v něčem jako UTF-8 (jinak známé jako AL32UTF8 - nepoužívejte UTF8 ) nebo UTF-16, abyste mohli efektivně ukládat vícebajtová data. I když ji nyní nepotřebujete, je moudré pokusit se – bez životních záruk – prověřit svou databázi do budoucna bez nutnosti migrace v budoucnu.

Pokud chcete zadat různé znakové sady pro různé sloupce v databázi, pak by bylo lepší určit, zda je tento požadavek skutečně nezbytný, a pokusit se jej odstranit. Pokud je to nezbytně nutné, pak nejlepším řešením může být použití znakové sady, která je nadmnožinou všech potenciálních znakových sad. Pak mějte nějaké kontrolní omezení, které omezuje sloupec na konkrétní hexadecimální hodnoty. Nedoporučoval bych to dělat vůbec, potenciál pro plížení chyb je obrovský a je to extrémně složité. Kromě toho různé znakové sady vykreslují různé hexadecimální hodnoty odlišně. To zase znamená, že musíte vynutit, aby byl sloupec vykreslen specifickým znakem, což je nemožné, protože to nespadá do rozsahu databáze.

1. Zajímalo by mě, jaká je situace




  1. Vytvoření studeného pohotovostního režimu pro PostgreSQL pomocí Amazon AWS

  2. Mysql select with in klauzule nepoužívá index

  3. Jak nainstalovat klenot MySQL na Mac OS X

  4. Porušení omezení integrity:1452 laravel