PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL ignora traços ao fazer o pedido


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ê.