Oto, co prawdopodobnie się dzieje:
- Twój zestaw znaków klienta musi być podobny do CP1252 lub ISO-8859-15, podczas gdy w rzeczywistości twój klient naprawdę używa UTF8.
- W tym zestawie znaków (UTF8) symbol
á
zajmuje dwa bajty, więc twój klient wysyła te dwa bajty, jednocześnie mówiąc Oracle, aby traktował je jako CP1252. W CP1252 dwubajtowy kod dla dwóch znaków, co powoduje, że DB interpretuje dane wejściowe jako dwa znaki, dlategolength('à')
równa się 2 (a jeśli wstawisz ten ciąg, wynik wstawienia nie jest równyà
) - Kiedy poprawnie ustawisz zestaw znaków, dane wejściowe są poprawnie traktowane przez Oracle jako pojedynczy znak, a jego długość wynosi 1 (nadal dwa bajty).
Wniosek:ustaw poprawnie zestaw znaków klienta lub otrzymasz błędy w tłumaczeniu (w ten sposób nie dostaniesz niedozwolonych znaków, ale możesz uzyskać dziwne symbole (¿
).
Zestaw znaków bazy danych jest ustawiany w momencie tworzenia i zazwyczaj jest zmieniany poprzez eksport/utworzenie pustej bazy danych/importowanie.