Rails/PHP e mysql: convertire un database da 8859-1 a utf-8

Dicembre 12, 2007

db
Premetto che nn ricordo dove ho preso queste informazioni quindi non riporterò i vari link. Cmq sono prese da siti diversi.

Per convertire un db innanzi tutto bisogna acceddere alla console di mysql. quindi da terminale lanciare:
mysql -u nome_utente -p nome_db

poi eseguire i seguenti comandi:

mysqldump --user=nome_utente -p --default-character-set=latin1 -c --insert-ignore --skip-set-charset nome_db > dump.sql

iconv -f ISO-8859-1 -t UTF-8 dump.sql > dump_utf8.sql

sed "s/CHARSET=latin1/CHARSET=utf8/" < dump_utf8.sql > dbs.sql

mysql --user=root -p --execute="CREATE DATABASE nome_nuovo_db CHARACTER SET utf8 COLLATE utf8_general_ci;"

mysql --user=root --max_allowed_packet=16M -p --default-character-set=utf8 nome_nuovo_db < dbs.sql

Fatto questo ci ritroviamo il db in utf8.

Ora se si visualizzano questi dati in pagine php o rails utilizzando la codifica utf8 le lettere accentate verranno visualizzate male.

Come risolvere questo problema?
In php:
subito dopo il comando di selezione del db inserire:
mysql_query("SET NAMES 'utf8'");

In Rails:
Nel file application.rb inserire:
before_filter :configure_charsets

def configure_charsets
@response.headers["Content-Type"] = "text/html; charset=utf-8"
# Set connection charset. MySQL 4.0 doesn't support this so it
# will throw an error, MySQL 4.1 needs this
suppress(ActiveRecord::StatementInvalid) do
ActiveRecord::Base.connection.execute 'SET NAMES UTF8'
end
end

PS: ci sono voluti quasi 2 giorni per capire come risolvere sto cazzo di stupido problema. Dannate multilingue!



- Sembra che ti stia impartendo la comunione – disse Ulisse.
- Corpo e sangue di un povero lettore editoriale e di un malato terminale. Quanti cristi inchiodati a una sedia o a un letto la gente scavalca, per inchinarsi a un cristo di legno. Quanti sacrifici dimenticati per ricordarne uno. Si mi facessero entrare in una chiesa, griderei: smettete di guardare quell’altare vuoto. Adoratevi l’un l’altro. …

….

(Achille piè veloce – Stefano Benni)

Una Risposta a “Rails/PHP e mysql: convertire un database da 8859-1 a utf-8”


  1. Grazie mille! Però non riesco ancora a capire a cosa serva questo SET NAMES…


Lascia una Risposta