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

Oracle ha impostato NLS_LANG predefinito

Questo è quello che probabilmente succede:

  • Il set di caratteri del tuo client deve essere qualcosa come CP1252 o ISO-8859-15 mentre in realtà il tuo client utilizza davvero UTF8.
  • In questo set di caratteri (UTF8), il simbolo á prende due byte, quindi il tuo client invia questi due byte, dicendo a Oracle di trattarli come CP1252. Nel CP1252 i due byte codificano per due caratteri che fanno sì che il DB interpreti l'input come due caratteri, quindi length('à') è uguale a 2 (e se inserisci questa stringa il risultato dell'inserimento non è uguale a à )
  • Quando imposti correttamente il set di caratteri, l'input viene correttamente trattato da Oracle come un singolo carattere e la sua lunghezza è 1 (ancora due byte).

Conclusione:imposta correttamente il set di caratteri del tuo client o otterrai errori di traduzione (in questo modo non otterrai caratteri illegali ma potresti ottenere strani simboli (¿ ).

Il set di caratteri del database viene impostato al momento della creazione e generalmente viene modificato tramite esportazione/crea un database vuoto/importa.