Това е така, защото da_DK.utf8 локал го дефинира по този начин. Помощни програми, съобразени с локала на Linux, например sort също ще работи по този начин.
Вашият convert_to(name, 'latin1') ще се счупи, ако намери знак, който не е в латинския набор от знаци 1, например € , така че това не е добро решение.
Можете да използвате order by convert_to(name, 'SQL_ASCII') , което ще игнорира локално дефинирано сортиране и просто ще използва байтови стойности.
Грозна хак редакция:
order by
(
ascii(name) between ascii('a') and ascii('z')
or ascii(name) between ascii('A') and ascii('Z')
or ascii(name)>127
),
name;
Това първо ще сортира всичко, което започва с ASCII, което не е буква. Това е много грозно, защото сортирането по-нататък в низ би се държало странно, но може да е достатъчно добро за вас.