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

Si tenemos el conjunto de caracteres US7ASCII, ¿por qué nos permite almacenar caracteres que no son ASCII?

Funciona porque las siguientes condiciones son ambas verdaderas:

  • El conjunto de caracteres del cliente es igual al conjunto de caracteres de su base de datos.
  • El conjunto de caracteres permite cualquier valor de byte

El conjunto de caracteres de su base de datos y el conjunto de caracteres de su cliente están configurados en US7ASCII . En tal caso, cada dato se escribe/lee uno por uno sin ninguna conversión, es decir, los bytes que envía se escriben exactamente en la base de datos. Probablemente no configuró NLS_LANG en absoluto en su lado del cliente, pero Oracle lo establece por defecto en AMERICAN_AMERICA.US7ASCII .

US7ASCII es una codificación de 7 bits. Supongo que una aplicación ASCII pura (que podría ser bastante difícil de encontrar) simplemente ignoraría el octavo bit que se almacena en una arquitectura de 8 bits. Otros conjuntos de caracteres, p. AL32UTF8 no permita cada valor de byte. En este caso, dichos caracteres serán reemplazados por un marcador de posición, p. ¿ o ? .

Tenga en cuenta que establece el conjunto de caracteres de su cliente en US7ASCII lo que muy probablemente no sea correcto. Establézcalo correctamente en el conjunto de caracteres que utiliza su aplicación, luego ° será reemplazado.

En caso de que utilice SQL*Plus, compruebe la página de códigos de la consola con el comando chcp , resp. locale charmap . Configure su NLS_LANG variable de entorno en consecuencia antes de iniciar sqlplus.