Interessante, anche Postgres fallisce qui:
[2] pry(main)> DB.query_single('select lower(?)', 'ΣΠΥΡΟΣ')
=> ["σπυροσ"]
Forse dovremmo semplicemente gestire questo comportamento anomalo come caso speciale nel nostro metodo interno di Discourse che calcola username_lower?
Trova tutti i metodi che chiamano username_lower, convoglia le loro chiamate a una funzione centrale e poi gestisci questo caso speciale (immagino che possiamo usare una chiamata a mini_racer se vogliamo, oppure semplicemente chiamare .lower e correggerla successivamente con una chiamata a sub)
Aggiorno il titolo dell’OP qui per renderlo più chiaro.