> Převádět všechno na text není dobrý nápad. Může to mít výrazný dopad na výkon, např. když databáze místo nalezení čísla v indexu bude sekvenčně procházet tabulku, všechna čísla převádět na text a ten pak porovnávat s vaším parametrem.
Netvrdím, že je to ideální řešení, i když myslím, že tak stupidní věc jen tak nějaká DB neudělá. Možná H2.
> Takže jak na vstupu tak na výstupu může být špatné kódování
Pokud používáme java.lang.String (docela realistický předpoklad), tak ten neumí reprezentovat nic špatně zakódovaného. Ano, interně se použije třeba UTF-16 nebo ASCII, ale to ne implementační detail a konstruktor nic nevalidního nevpustí. Takový vstup je buď odmítnut, nebo nějak sanitizován. Třeba tady se to sanitizuje: https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#String(byte[],%20java.nio.charset.Charset)
Je tedy celkem jedno, jestli vstup je UTF-8, UTF-16, UTF-7, ASCII nebo třeba GBK. Jakmile se z toho udělá String, musí to být validní, a dál nám případný sanitizovaný nevalidní vstup nemá jak ublížit. Maximálně uložíme nějaký gibberish do DB (pokud špatně dekódujeme vstup), ale na escapování to vliv nemá.