Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    55

    MySQL mi converte i caratteri in utf-8?

    Salve ragazzi, so che ci sono mille topic su lettere accentate, charset e affini, ma mi sembra di avere un problema diverso da quelli che ho visto descritti qui in giro.

    Vengo subito al dunque: dovendo reinstallare windows, ho fatto una copia di tutti i miei database usando phpmyadmin. Una volta reinstallato tutto, ho importato il file da phpmyadmin stesso, ma un sito in cui uso il charset iso-8859-15 non visualizza correttamente i soliti caratteri speciali (lettere accentate in primis) dopo il ripristino. Se guardo le tabelle da phpmyadmin tutti i testi vengono visualizzati correttamente e sia il database che le tabelle hanno come collation latin1_swedish_ci, ma sul sito vedo quei maledetti Ã. Se imposto utf-8 come charset del sito vedo i caratteri giusti ma ovviamente poi vengono distorte le stringhe statiche delle pagine e comunque non posso mettermi a convertire l'intero sito ora! Credo quindi che MySQL stia convertendo il testo in UTF-8 automaticamente!

    C'è qualche configurazione che mi è sfuggita? Se qualcuno potesse cortesemente darmi una mano, eventualmente anche linkandomi anche qualche discussione che non sono riuscito a trovare sullo stesso problema, gliene sarei grato! Per favore, non ditemi di convertire il sito e le tabelle in utf-8 perché è impensabile che ora converta un sito già in produzione!

  2. #2
    Per quanto riguarda mysql il character set trova una allocazione su piu' livelli. Tralasciando il livello della singola tabella/colonna assumendo per tutti il charset del server troverai

    character set a livello server
    charset della connessione
    charset del client

    poi nello script html che invierai al browser ci sara' il tag <meta con il tipo di charset

    Quindi se per caso il client oppure la connessione utilizzassero utf8 (multibyte) e' chiaro che verranno distorti i caratteri che per utf8 necessitano di 3 o piu' byte per cui la successiva lettura a 2 byte per carattere del latin1 sara' distorta. Lo stesso se imposti utf8 per i caratteri memorizzati con latin1.

    prova ad inserire dopo aver effettuato la connessione:

    mysql_query('set names utf8');

    e nell'html <meta .... charset=utf-8

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    55
    Piero, come dicevo non intendo convertire il sito in UTF-8, anche perché ho diversi vecchi siti che usano la codifica iso-8859-15, ma vorrei riuscire a configurare correttamente l'ambiente, tantopiù che ho provato a copiare sito e database (usando ovviamente lo stesso file sql) sul mio pc di casa e funziona tutto regolarmente. I primi due charset che hai nominato, per esempio, come si modificano?

  4. #4
    Originariamente inviato da Tenebral
    Piero, come dicevo non intendo convertire il sito in UTF-8, anche perché ho diversi vecchi siti che usano la codifica iso-8859-15, ma vorrei riuscire a configurare correttamente l'ambiente, tantopiù che ho provato a copiare sito e database (usando ovviamente lo stesso file sql) sul mio pc di casa e funziona tutto regolarmente. I primi due charset che hai nominato, per esempio, come si modificano?
    Non ti ho suggerito di convertire il sito in utf8 (anche se sarebbe meglio) ma di settare la connessione ed il client come utf8 (oppure come latin1) ovviamente dopo questo settaggio deve essere anche coerente il meta dell'html.

    Tu puoi avere la codifica che ti pare sul tuo server mysql/database/tabelle, ma se il server HTTPD che gestisce il tuo script ha come default un tipo di codifica diverso dalle tue tabelle, non resta che adeguarsi.

    con la query "set names" puoi impostare il tipo di charset piu' congeniale. Potrebbe anche essere latin1 oppure utf8, ovviamente la codifica che andrai a forzare deve essere coerente con quella definita nel meta.

    La codifica forzata si applica solo alla connessione e non alla tabella che rimane come prima. In pratica hai un disallineamento tra tabella, server, connessione, client, script, server httpd e html. Dove sia questo disallineamento lo devi trovare tu.

    Sul tuo pc di casa non hai questo disallineamento. Sul server HTTPD online invece si

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    55
    Mh, no, forse mi sono spiegato male all'inizio. Il problema non si presenta nel server online (nel caso mi sarei ovviamente adeguato), ma nel PC su cui lavoro (che non è quello di casa). Qui posso modificare a piacimento le impostazioni, ma non vi è mai stato bisogno, dal momento che fin'ora non ho mai avuto problemi del genere. Sono anche andato a recuperarmi il file my.ini dal backup, ma se imposto default-character-set a latin1 com'era prima della resinstallazione sulle pagine non vedo proprio le righe del DB in cui ci sono testi con lettere accentate! Qualche idea?

  6. #6
    Originariamente inviato da Tenebral
    Mh, no, forse mi sono spiegato male all'inizio. Il problema non si presenta nel server online (nel caso mi sarei ovviamente adeguato), ma nel PC su cui lavoro (che non è quello di casa). Qui posso modificare a piacimento le impostazioni, ma non vi è mai stato bisogno, dal momento che fin'ora non ho mai avuto problemi del genere. Sono anche andato a recuperarmi il file my.ini dal backup, ma se imposto default-character-set a latin1 com'era prima della resinstallazione sulle pagine non vedo proprio le righe del DB in cui ci sono testi con lettere accentate! Qualche idea?
    detto cosi' no, nessuna idea.

    il default nel my.ini serve in caso di default dell'informazione nella creazione di database e tabelle, non per la gestione delle stesse.

    per scendere in particolari dovresti dire le versioni, cosa usi per "vedere le righe del DB"

    Ripeto solo quanto detto prima: colonne, tabelle, database, connessione, client, html hanno tutti il loro settaggio che in caso di default all'installazione o connessione utilizzeranno l'impostazione di default. Default di mysql (my.ini), del client, del server httpd, del browser.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    55
    Dimenticavo che oltre a default-character-set ho impostato a latin1 anche character-set-server, com'era nel vecchio my.ini.
    Con questa modifica non visualizzavo nulla a causa di htmlspecialchars, che dalla versione 5.4 PHP assume come codifica (se non specificata tramite l'apposito parametro) UTF-8 anziché ISO-8859-1. Prima avevo la versione 5.3.8. Se tolgo gli htmlspecialchars, le lettere accentate vengono visualizzate correttamente, ma naturalmente non posso lasciare il sito senza. Bella seccatura, dato che non mi sembra ci sia nessuna funzione per modificare a priori questo comportamento. Deciderò il da farsi. Grazie per l'aiuto comunque!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.