Isso ocorre porque
da_DK.utf8
locale o define dessa maneira. Utilitários com reconhecimento de localidade do Linux, por exemplo sort
também funcionará assim. Seu
convert_to(name, 'latin1')
irá quebrar se encontrar um caractere que não esteja no conjunto de caracteres latino 1, por exemplo €
, portanto, não é uma boa solução alternativa. Você pode usar
order by convert_to(name, 'SQL_ASCII')
, que ignorará a classificação definida por localidade e simplesmente usará valores de byte. Edição de hack feio:
order by
(
ascii(name) between ascii('a') and ascii('z')
or ascii(name) between ascii('A') and ascii('Z')
or ascii(name)>127
),
name;
Isso classificará primeiro qualquer coisa que comece com ASCII não-letra. Isso é muito feio, porque classificar mais na string se comportaria de maneira estranha, mas pode ser bom o suficiente para você.