Questo perché da_DK.utf8 locale lo definisce in questo modo. Programmi di utilità per la localizzazione di Linux, ad esempio sort funzionerà anche così.
Il tuo convert_to(name, 'latin1') si interromperà se trova un carattere che non è nel set di caratteri Latin 1, ad esempio € , quindi non è una buona soluzione.
Puoi usare order by convert_to(name, 'SQL_ASCII') , che ignorerà l'ordinamento definito dalla locale e utilizzerà semplicemente i valori dei byte.
Brutta modifica dell'hacking:
order by
(
ascii(name) between ascii('a') and ascii('z')
or ascii(name) between ascii('A') and ascii('Z')
or ascii(name)>127
),
name;
Questo ordinerà prima tutto ciò che inizia con ASCII non lettera. Questo è molto brutto, perché l'ordinamento ulteriormente nella stringa si comporterebbe in modo strano, ma può essere abbastanza buono per te.