Dzieje się tak, ponieważ da_DK.utf8 locale definiuje to w ten sposób. Narzędzia obsługujące lokalizacje Linux, na przykład sort tak też będzie działać.
Twój convert_to(name, 'latin1') zerwie się, jeśli znajdzie znak, który nie jest w zestawie znaków Latin 1, na przykład € , więc nie jest to dobre obejście.
Możesz użyć order by convert_to(name, 'SQL_ASCII') , który zignoruje sortowanie zdefiniowane lokalnie i po prostu użyje wartości bajtowych.
Brzydka edycja hackowania:
order by
(
ascii(name) between ascii('a') and ascii('z')
or ascii(name) between ascii('A') and ascii('Z')
or ascii(name)>127
),
name;
To posortuje najpierw wszystko, co zaczyna się od ASCII nieliterowego. Jest to bardzo brzydkie, ponieważ dalsze sortowanie w ciągach zachowywałoby się dziwnie, ale może być dla ciebie wystarczająco dobre.