Das Zahlenzeichen
, º
, ist 0xBA in ISO-8869-1
nicht UTF-8. Ihre CSV-Datei ist also mit Latin-1 codiert, aber Sie versuchen, sie in Ihrer Datenbank als UTF-8 zu speichern, ohne die Codierung zu korrigieren.
Sie können versuchen, Ihrer CSV-Bibliothek mitzuteilen, dass sie mit Latin-1-codiertem Text arbeitet und sich möglicherweise um die Konvertierung in UTF-8 kümmert. Wenn das nicht funktioniert, können Sie es selbst mit Iconv :
ruby-1.9.2 > Iconv.iconv('UTF-8', 'ISO-8859-1', "\xba")
=> ["º"]
ruby-1.9.2 > Iconv.iconv('UTF-8', 'ISO-8859-1', "\xb0")
=> ["°"]
Sie haben keine Probleme mit SQLite, da SQLite sehr nachsichtig ist und ein sehr lockeres Typsystem hat. PostgreSQL, OTOH, neigt dazu, ziemlich streng zu sein und beschwert sich richtig, wenn Sie versuchen, es mit ungültigen Daten zu füttern. Ich würde empfehlen, dass Sie aufhören, auf SQLite zu entwickeln, wenn Sie Heroku und PostgreSQL bereitstellen, da es andere Unterschiede gibt, die Probleme verursachen werden (zum Beispiel das Verhalten von GROUP BY und LIKE).