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, quindilength('à')
è 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.