Le signe numérique
, º
, vaut 0xBA dans ISO-8869-1
pas UTF-8. Votre fichier CSV est donc encodé avec Latin-1 mais vous essayez de le stocker dans votre base de données au format UTF-8 sans corriger l'encodage.
Vous pouvez essayer de dire à votre bibliothèque CSV qu'elle traite du texte encodé en Latin-1 et peut-être qu'elle se chargera de la conversion en UTF-8. Si cela ne fonctionne pas, vous pouvez le faire vous-même avec Icônev :
ruby-1.9.2 > Iconv.iconv('UTF-8', 'ISO-8859-1', "\xba")
=> ["º"]
ruby-1.9.2 > Iconv.iconv('UTF-8', 'ISO-8859-1', "\xb0")
=> ["°"]
Vous n'avez pas de problème avec SQLite parce que SQLite a tendance à être très indulgent et qu'il a un système de type très lâche. PostgreSQL, OTOH, a tendance à être plutôt strict et se plaint correctement si vous essayez de lui fournir des données invalides. Je vous recommande d'arrêter de développer sur SQLite si vous allez déployer sur Heroku et PostgreSQL, il existe d'autres différences qui causeront des problèmes (le comportement de GROUP BY et LIKE par exemple).