znak numero
, º
, je 0xBA v ISO-8869-1
ne UTF-8. Váš soubor CSV je tedy zakódován pomocí Latin-1, ale vy se jej pokoušíte uložit do databáze jako UTF-8, aniž byste kódování opravili.
Můžete zkusit své knihovně CSV sdělit, že pracuje s textem zakódovaným v Latin-1 a možná se postará o převod do UTF-8. Pokud to nefunguje, můžete to udělat sami pomocí Ikona :
ruby-1.9.2 > Iconv.iconv('UTF-8', 'ISO-8859-1', "\xba")
=> ["º"]
ruby-1.9.2 > Iconv.iconv('UTF-8', 'ISO-8859-1', "\xb0")
=> ["°"]
S SQLite nemáte potíže, protože SQLite má tendenci být velmi shovívavý a má velmi volný typový systém. PostgreSQL, OTOH, má tendenci být spíše přísný a správně si stěžuje, pokud se do něj pokoušíte vložit neplatná data. Pokud se chystáte nasadit na Heroku a PostgreSQL, doporučoval bych, abyste přestali vyvíjet nad SQLite, jsou zde další rozdíly, které způsobí problémy (například chování GROUP BY a LIKE).