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

Definizione di un set di caratteri per una colonna Per le tabelle di database Oracle

La semplice risposta è che, a differenza di MySQL, i set di caratteri non possono essere definiti in livello di colonna (o tabella) . Latin1 non è nemmeno un set di caratteri Oracle valido.

I set di caratteri sono coerenti in tutto il database e saranno stati specificati al momento della creazione del database. Puoi trovare il tuo personaggio interrogando NLS_DATABASE_PARAMETERS ,

select value
  from nls_database_parameters
 where parameter = 'NLS_CHARACTERSET'

L'elenco completo dei possibili set di caratteri è disponibile per 11g r2 e per 9i oppure puoi interrogare V$NLS_VALID_VALUES .

È possibile utilizzare ALTER SESSION dichiarazione per impostare il NLS_LANGUAGE o il NLS_TERRITORY , ma sfortunatamente non puoi farlo per il set di caratteri. Credo che ciò sia dovuto al fatto che la modifica della lingua cambia la modalità di visualizzazione di Oracle i dati memorizzati mentre la modifica del set di caratteri cambierebbe il modo in cui Oracle memorizza i dati.

Quando visualizzi i dati, puoi ovviamente specificare il set di caratteri richiesto in qualsiasi client tu stia utilizzando.

Migrazione del set di caratteri non è un compito banale e non dovrebbe essere fatto alla leggera.

In una piccola nota a margine, perché stai cercando di usare Latin 1? Sarebbe più normale impostare un nuovo database in qualcosa come UTF-8 (altrimenti noto come AL32UTF8 - non utilizzare UTF8 ) o UTF-16 in modo da poter archiviare dati multibyte in modo efficace. Anche se non ne hai bisogno ora, è saggio tentare, senza garanzie nella vita, di rendere il tuo database a prova di futuro senza bisogno di migrare in futuro.

Se stai cercando di specificare set di caratteri diversi per colonne diverse in un database, l'opzione migliore sarebbe determinare se questo requisito è davvero necessario e provare a rimuoverlo. Se è assolutamente necessario, la soluzione migliore potrebbe essere quella di utilizzare un set di caratteri che sia un superset di tutti i potenziali set di caratteri. Quindi, avere una sorta di vincolo di controllo che limiti la colonna a valori esadecimali specifici. Non consiglierei affatto di farlo, il potenziale che si insinuano errori è enorme ed è estremamente complesso. Inoltre, set di caratteri diversi rendono diversi valori esadecimali in modo diverso. Questo, a sua volta, significa che devi imporre che una colonna sia visualizzata con un carattere specifico, il che è impossibile in quanto non rientra nell'ambito del database.

1. Sarei interessato a conoscere la situazione