Ето какво вероятно се случва:
- Вашият клиентски набор от знаци трябва да е нещо като CP1252 или ISO-8859-15, докато всъщност вашият клиент наистина използва UTF8.
- В този набор от знаци (UTF8), символът
á
отнема два байта, така че вашият клиент изпраща тези два байта, като същевременно казва на Oracle да ги третира като CP1252. В CP1252 двата байта кодират два знака, което води до интерпретиране на входа от DB като два знака, следователноlength('à')
е равно на 2 (и ако вмъкнете този низ, резултатът от вмъкването не е равен наà
) - Когато зададете правилно набора от знаци, входът се третира правилно от Oracle като един знак и неговата дължина е 1 (все още два байта).
Заключение:задайте правилно своя клиентски набор от символи или ще получите грешки при превода (по този начин няма да получите незаконни знаци, но може да получите странни символи (¿
).
Наборът от символи на базата данни се задава по време на създаването и обикновено се променя чрез експортиране/създаване на празна база данни/импортиране.