Interestingly Postgres also fails here:
[2] pry(main)> DB.query_single('select lower(?)', 'ΣΠΥΡΟΣ')
=> ["σπυροσ"]
Perhaps we should simply special case this quirk in our internal Discourse method that handles calculating username_lower ?
Find all the methods that call username_lower pipe them to a central function and then have this special case allowed for (I guess we can use a mini_racer call here if we wish or simply call .lower and fix it up afterwards with a sub call)
Updating the OP title here to make it clearer.