Detta är vad som förmodligen händer:
- Din klientteckenuppsättning måste vara något som CP1252 eller ISO-8859-15, medan din klient faktiskt använder UTF8.
- I denna teckenuppsättning (UTF8), symbolen
á
tar två byte, så din klient skickar dessa två byte, samtidigt som du säger åt Oracle att behandla dessa som CP1252. I CP1252 kodar två bytes för två tecken vilket resulterar i att DB tolkar inmatningen som två tecken, därförlength('à')
är lika med 2 (och om du infogar den här strängen blir resultatet av infogningen inte lika medà
) - När du ställer in teckenuppsättningen korrekt, behandlas inmatningen korrekt av oracle som ett enda tecken, och dess längd är 1 (fortfarande två byte).
Slutsats:ställ in din klientteckenuppsättning korrekt annars kommer du att få översättningsfel (du kommer inte få olagliga tecken på det här sättet men du kan få konstiga symboler (¿
).
Databasens teckenuppsättning ställs in vid tidpunkten för skapandet och ändras vanligtvis via export/skapa tom databas/import.