sql >> Database >  >> RDS >> Oracle

Een tekenset voor een kolom definiëren Voor Oracle-databasetabellen

Het simpele antwoord is dat, in tegenstelling tot MySQL, tekensets niet kunnen worden gedefinieerd op kolom (of tabel) niveau . Latin1 is ook geen geldige Oracle-tekenset.

Tekensets zijn consistent in de database en zijn gespecificeerd toen u de database maakte. Je kunt je personage vinden door NLS_DATABASE_PARAMETERS ,

select value
  from nls_database_parameters
 where parameter = 'NLS_CHARACTERSET'

De volledige lijst met mogelijke tekensets is beschikbaar voor 11g r2 en voor 9i of u kunt een query uitvoeren op V$NLS_VALID_VALUES .

Het is mogelijk om de ALTER SESSION verklaring om de NLS_LANGUAGE . in te stellen of de NLS_TERRITORY , maar helaas kun je dit niet doen voor de tekenset. Ik denk dat dit komt omdat het veranderen van de taal verandert hoe Oracle zou weergeven de opgeslagen gegevens, terwijl het veranderen van de tekenset zou veranderen hoe Oracle opslaat de gegevens.

Bij het weergeven van de gegevens kunt u natuurlijk de vereiste tekenset specificeren in welke client u ook gebruikt.

Migratie van tekenset is geen triviale taak en moet niet lichtvaardig worden gedaan.

Even terzijde, waarom probeer je Latijn 1 te gebruiken? Het zou normaler zijn om een ​​nieuwe database op te zetten in iets als UTF-8 (ook wel bekend als AL32UTF8 - gebruik geen UTF8 ) of UTF-16, zodat u multi-byte-gegevens effectief kunt opslaan. Zelfs als je het nu niet nodig hebt, is het verstandig om te proberen - geen garanties in het leven - om je database toekomstbestendig te maken zonder dat je in de toekomst hoeft te migreren.

Als u verschillende tekensets wilt specificeren voor verschillende kolommen in een database, is het een betere optie om te bepalen of deze vereiste echt nodig is en om te proberen deze te verwijderen. Als het absoluut noodzakelijk is, kun je het beste een tekenset gebruiken die een superset is van alle mogelijke tekensets. Zorg dan voor een soort controlebeperking die de kolom beperkt tot specifieke hex-waarden. Ik zou dit helemaal niet aanraden, de kans dat er fouten insluipen is enorm en het is extreem complex. Bovendien geven verschillende tekensets verschillende hexadecimale waarden anders weer. Dit betekent op zijn beurt dat u moet afdwingen dat een kolom in een specifiek teken wordt weergegeven, wat onmogelijk is omdat het buiten het bereik van de database valt.

1. Ik zou graag de situatie willen weten




  1. Kan niet inloggen op SQL Server + SQL Server-verificatie + fout:18456

  2. MySQL-invoeging met While-lus

  3. MySQL Select-query om recordbasis op te halen op lijstwaarden

  4. omgaan met HTML-gegevens in Oracle-query