Il segno del numero
, º
, è 0xBA in ISO-8869-1
non UTF-8. Quindi il tuo file CSV è codificato con Latin-1 ma stai cercando di archiviarlo nel tuo database come UTF-8 senza correggere la codifica.
Puoi provare a dire alla tua libreria CSV che ha a che fare con testo codificato Latin-1 e forse si occuperà della conversione in UTF-8. Se non funziona, puoi farlo da solo con Conv :
ruby-1.9.2 > Iconv.iconv('UTF-8', 'ISO-8859-1', "\xba")
=> ["º"]
ruby-1.9.2 > Iconv.iconv('UTF-8', 'ISO-8859-1', "\xb0")
=> ["°"]
Non hai problemi con SQLite perché SQLite tende a essere molto indulgente e ha un sistema di tipi molto lento. PostgreSQL, OTOH, tende ad essere piuttosto severo e si lamenta correttamente se si tenta di fornirgli dati non validi. Ti consiglio di interrompere lo sviluppo su SQLite se intendi eseguire il deployment su Heroku e PostgreSQL, ci sono altre differenze che causeranno problemi (il comportamento di GROUP BY e LIKE per esempio).