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

Definering af et tegnsæt for en kolonne Til oracle-databasetabeller

Det enkle svar er, at i modsætning til MySQL kan tegnsæt ikke defineres på kolonne (eller tabel) niveau . Latin1 er heller ikke et gyldigt Oracle-tegnsæt.

Tegnsæt er konsistente på tværs af databasen og vil være blevet specificeret, da du oprettede databasen. Du kan finde din karakter ved at forespørge NLS_DATABASE_PARAMETERS kode> ,

select value
  from nls_database_parameters
 where parameter = 'NLS_CHARACTERSET'

Den fulde liste over mulige tegnsæt er tilgængelig for 11g r2 og for 9i eller du kan forespørge V$NLS_VALID_VALUES .

Det er muligt at bruge ALTER SESSION erklæring for at indstille NLS_LANGUAGE eller NLS_TERRITORY , men det kan du desværre ikke gøre for karaktersættet. Jeg tror, ​​det skyldes, at ændring af sproget ændrer, hvordan Oracle ville vise de lagrede data, mens ændring af tegnsættet ville ændre, hvordan Oracle lagrer dataene.

Når du viser dataene, kan du selvfølgelig angive det nødvendige tegnsæt i den klient, du bruger.

Migration af tegnsæt er ikke en triviel opgave og bør ikke gøres let.

Med en lille sidebemærkning, hvorfor prøver du at bruge Latin 1? Det ville være mere normalt at oprette en ny database i noget som UTF-8 (også kendt som AL32UTF8 - brug ikke UTF8 ) eller UTF-16, så du kan gemme multi-byte data effektivt. Selvom du ikke har brug for det nu, er det klogt at forsøge - ingen garantier i livet - at fremtidssikre din database uden behov for at migrere i fremtiden.

Hvis du ønsker at specificere forskellige tegnsæt for forskellige kolonner i en database, så ville den bedre mulighed være at afgøre, om dette krav virkelig er nødvendigt, og prøve at fjerne det. Hvis det absolut er nødvendigt, kan dit bedste bud være at bruge et tegnsæt, der er et supersæt af alle potentielle tegnsæt. Derefter skal du have en form for kontrolbegrænsning, der begrænser kolonnen til specifikke hex-værdier. Jeg vil overhovedet ikke anbefale at gøre dette, potentialet for, at fejl kan snige sig ind er massivt, og det er ekstremt komplekst. Desuden gengiver forskellige tegnsæt forskellige hex-værdier forskelligt. Dette betyder igen, at du skal håndhæve, at en kolonne gengives med en bestemt karakter, hvilket er umuligt, da det falder uden for databasens omfang.

1. Jeg ville være interesseret i at vide situationen




  1. Hver afledt tabel skal have sit eget alias - hvornår er noget en afledt tabel?

  2. MySQL - BETWEEN vil ikke vælge korrekte resultater

  3. Administrer transaktionssammenfald ved hjælp af låse i SQL Server

  4. com.mysql.jdbc.exceptions.MySQLSyntaxErrorException ved brug af PreparedStatement