PostgreSQL sta utilizzando le regole di confronto delle impostazioni internazionali per il confronto delle stringhe. Python utilizza una diversa localizzazione (possibilmente "C") per le regole di confronto.
E 'difficile dire di più senza sapere che cosa il database LC_COLLATE
è (da \l+
in psql
) e ciò che il vostro ambiente di runtime per Python è. Prova a mostrare le impostazioni internazionali del database e l'output del comando shell locale
.
Vedere the PostgreSQL documentation on locales.
Per esempio, confrontare e contrapporre:
-- results may vary depending on your OS/libc
SELECT 'P 0' < 'P! ' COLLATE "C"; -- returns true
SELECT 'P 0' < 'P! ' COLLATE "en_GB"; -- returns false
fonte
2012-11-23 14:02:37
controllare ciò che dal locale il database sta usando. I confronti tra stringhe dipendono dal modo in cui le regole di confronto vengono eseguite nelle impostazioni internazionali correnti. – hammar
Sono abbastanza sicuro che non sia dovuto alla localizzazione. – kennytm
@KennyTM: alcune impostazioni locali ignorano gli spazi durante la fascicolazione, il che spiegherebbe la differenza in questo caso. – hammar