sql >> Base de Datos >  >> RDS >> Oracle

Definición de un juego de caracteres para una columna Para tablas de bases de datos de Oracle

La respuesta simple es que, a diferencia de MySQL, los conjuntos de caracteres no se pueden definir en nivel de columna (o tabla) . Latin1 tampoco es un juego de caracteres de Oracle válido.

Los conjuntos de caracteres son consistentes en toda la base de datos y se habrán especificado cuando creó la base de datos. Puede encontrar su personaje consultando NLS_DATABASE_PARAMETERS ,

select value
  from nls_database_parameters
 where parameter = 'NLS_CHARACTERSET'

La lista completa de posibles conjuntos de caracteres está disponible para 11g r2 y para 9i o puede consultar V$NLS_VALID_VALUES .

Es posible usar el ALTER SESSION declaración para establecer el NLS_LANGUAGE o el NLS_TERRITORY , pero desafortunadamente no puedes hacer esto para el juego de caracteres. Creo que esto se debe a que alterar el idioma cambia la forma en que Oracle muestra los datos almacenados mientras que cambiar el conjunto de caracteres cambiaría la forma en que Oracle almacena los datos.

Al mostrar los datos, por supuesto, puede especificar el juego de caracteres requerido en cualquier cliente que esté utilizando.

Migración del conjunto de caracteres no es una tarea trivial y no debe hacerse a la ligera.

En una pequeña nota al margen, ¿por qué estás tratando de usar Latin 1? Sería más normal configurar una nueva base de datos en algo como UTF-8 (también conocido como AL32UTF8 - no use UTF8 ) o UTF-16 para que pueda almacenar datos de varios bytes de manera efectiva. Incluso si no la necesita ahora, es aconsejable intentar, sin garantías en la vida, preparar su base de datos para el futuro sin necesidad de migrar en el futuro.

Si está buscando especificar diferentes juegos de caracteres para diferentes columnas en una base de datos, la mejor opción sería determinar si este requisito es realmente necesario e intentar eliminarlo. Si es definitivamente necesario, su mejor opción podría ser usar un conjunto de caracteres que sea un superconjunto de todos los conjuntos de caracteres potenciales. Luego, tenga algún tipo de restricción de verificación que limite la columna a valores hexadecimales específicos. No recomendaría hacer esto en absoluto, la posibilidad de que se produzcan errores es enorme y extremadamente compleja. Además, diferentes conjuntos de caracteres representan diferentes valores hexadecimales de manera diferente. Esto, a su vez, significa que debe exigir que una columna se represente en un carácter específico, lo cual es imposible ya que queda fuera del alcance de la base de datos.

1. Me interesaría saber la situación