Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Convertire un database in UTF-8

    Ciao, ho il solito dannato problema con l'UTF-8 ( scusate )

    Ho un database mysql che prima era in latin1_swedish_ci e che ora ho convertito in utf8_unicode_ci ( l'ho fatto con phpmyadmin sia sul database sia su ogni singola tabella utilizzando il comando ALTER TABLE/DATABASE nometabellaodatabase DEFAULT CHARSET ecc.. ).

    Dopodiche ho una semplice pagina php in UTF-8 ( ho salvato il file in utf-8, utilizzo la funzione header di php e utilizzo il tag meta per specificare che il charset è UTF-8... ) che prende dei dati dal suddetto database:
    Codice PHP:
    <?php header('Content-type: text/html; charset=utf-8'); ?>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>


    <?php eval($RISULTATO_DI_UNA_QUERY_A_MYSQL); ?></p>


    èèèééééççççòòòòòùùùùù</p>
    </body>
    </html>
    Come vedete ci sono due paragrafi: uno coi dati presi dal database di prima e l'altro con del testo già contenuto all'interno del file.
    Mentre i caratteri del secondo paragrafo compaiono correttamente, nel paragrafo preso dal ldatabase i caratteri speciali vengono sostituiti da un ?, più precisamente da un rombo con un ? in mezzo
    Molto ingenuamente mi sono detto: avrò sbagliato qualcosa nel convertire il database, chissenefrega, usiamo l'output buffering insieme a utf8_encode!
    Così facendo i dati del database vengono stampati correttamente ma ora sono i caratteri del secondo paragrafo ad essere completamente sballati!
    Al posto di èèèééééççççòòòòòùùùùù
    compare èèèééééççççòòòòòùùùùù

    La domanda insomma è: é normale che i dati dal database debbano essere convertiti sempre con uff8_encode? O come credo sia più probabile ho sbagliato qualcosa nel convertire il database?
    Se invece mi devo rassegnare a utilizzare utf8_encode, come faccio a fare in modo che l'output che è già in UTF-8 non venga ulteriormente modificato?

  2. #2
    Strano, ho risolto Cercando un pò su Internet ho trovato questo: http://ildiscepolo.wordpress.com/200...8859-1-a-utf-8
    in questo articolo si afferma che per risolvare il problema basta inserire la seguente query subito sopo aver selezionato il database:
    mysql_query("SET NAMES 'utf8'");

    Funziona e non devo nemmeno utilizzare utf8_encode per visualizzare il tutto perfettamente.

    Da quanto ho capito il SET NAMES indica al database in che codifica devono essere mandati i dati al client.

    Ovviamente desidererei sapere lo stesso cosa ho sbagliato prima nel convertire il database dalla precedente codifica a UTF-8.

    EDIT: Aggiungo che la funzione mysql_client_encoding() mi restituisce latin-1 anche se utilizzo SET NAMES

  3. #3
    http://dev.mysql.com/doc/refman/5.0/...onnection.html

    in particolare leggi:

    There are two statements that affect the connection character sets:

    SET NAMES 'charset_name'
    SET CHARACTER SET charset_name

    ...... segue

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

  4. #4
    Ok, ma c'è un modo per avere già i dati in UTF-8 senza fare particolari operazioni?
    Tra l'altro ho fatto un test creando un database da zero già in utf-8, e nemmeno in questo modo riesco a ottenere i dati già in utf-8! Devo sempre usare il SET NAMES!
    Ho pensato che potesse dipendere da phpmyadmin, ma non credo che sia questa la fonte visto che le pagine del suddetto tool sono codificate in UTF-8...
    Che sia il server Apache?

  5. #5
    credo sia il client MySQL installato su PHP.....

    se dai una occhiata alle variabili di mysql vedrai che casotto di configurazione e' possibile per il character set..... guarda la lista del mio server su cui si trovano database in latin1 ed altri utf8 su windows.... ed ora prova a rifare la domanda:


    character set client utf8
    (Valore globale) latin1
    character set connection utf8
    (Valore globale) latin1
    character set database latin1
    character set filesystem binary
    character set results utf8
    (Valore globale) latin1
    character set server latin1
    character set system utf8
    character sets dir C:\Programmi\MySQL\MySQL Server 5.0\share\charsets\
    collation connection utf8_unicode_ci
    (Valore globale) latin1_swedish_ci
    collation database latin1_swedish_ci
    collation server latin1_swedish_ci

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

  6. #6
    Le variabii che credo possano interessare sono queste:

    character set client utf8 latin1
    character set connection utf8 latin1
    character set database latin1 latin1
    character set filesystem binary binary
    character set results utf8 latin1
    character set server latin1 latin1
    character set system utf8 utf8
    character sets dir C:\Programmi\EasyPHP 2.0b1\mysql\share\charsets\ C:\Programmi\EasyPHP 2.0b1\mysql\share\charsets\
    collation connection utf8_unicode_ci latin1_swedish_ci
    collation database latin1_swedish_ci latin1_swedish_ci
    collation server latin1_swedish_ci latin1_swedish_ci

    Dove il primo valore è quello di sessione mentre il secondo è il globale.
    Da quanto ho capito dovrei modificare le variabili globali che sono per la maggior parte settate a latin1 o no?
    Se si come si settano?

    PS.
    Specifico che sono su Windows xp con easyphp.


    EDIT: Ho provato così:
    SET GLOBAL character_set_connection='utf8';
    SET GLOBAL character_set_database='utf8';
    SET GLOBAL character_set_results='utf8';
    SET GLOBAL character_set_server='utf8';
    SET GLOBAL collation_connection='utf8_unicode_ci';
    SET GLOBAL collation_database='utf8_unicode_ci';
    SET GLOBAL collation_server='utf8_unicode_ci';
    e nonostante le varibili vengano settate correttamente non riesco ancora a ricevere i risultati in utf-8

  7. #7
    Prima di tutto direi che stai usando una versione "vecchia" di phpmyadmin.... e questo e' il "bello" di easyphp.... (buttalo)

    Poi direi ancora che il settaggio detto prima che fai con la query serve ad informare il server MySQL che il CLIENT MySQL, utilizzato da php, inviera' delle stringhe di comando e vorra' ricevere le risposte utilizzando "quel" determinato character set. Quindi si tratta di cosa usare nel dialogo visto dal client) e non di come deve essere settato il server mysql. Questo settaggio dura la sola istanza di connessione.

    Quindi parecchio dipende dalle varie versioni dei componenti utilizzati. Php, mysql in primis. Ecco una delle ragioni per "buttare" easyphp appena appena inizi a gestire gli script. Se installi tu metti quello che vuoi tu e come pare a te. Con easyphp devi usare quello che vuole lui. Puoi anche modificare le versioni, ma sicuramente in modo piu' complesso di una installazione normale.

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

  8. #8
    Poi direi ancora che il settaggio detto prima che fai con la query serve ad informare il server MySQL che il CLIENT MySQL, utilizzato da php, inviera' delle stringhe di comando e vorra' ricevere le risposte utilizzando "quel" determinato character set. Quindi si tratta di cosa usare nel dialogo visto dal client) e non di come deve essere settato il server mysql. Questo settaggio dura la sola istanza di connessione.
    Mi sa che hai ragione, una volta spento e riaccesso il webserver le variabili sono ritornate al loro valore originale.
    Quindi parecchio dipende dalle varie versioni dei componenti utilizzati. Php, mysql in primis. Ecco una delle ragioni per "buttare" easyphp appena appena inizi a gestire gli script. Se installi tu metti quello che vuoi tu e come pare a te. Con easyphp devi usare quello che vuole lui. Puoi anche modificare le versioni, ma sicuramente in modo piu' complesso di una installazione normale.
    Pur non avendo le ultimissime release arrivo comunque alla versione 5 sia per php che per mysql ( phpmyadmin non è un problema visto che basta scaricare una cartella ).
    A questo punto mi viene un dubbio: non è che ci sono alcuni settaggi che si possono fare solo durante l'installazione di php e mysql riguardanti il character set e che poi non possono più essere modificati se non reinstallandoli? ( Non so più che pensare :master: )

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 © 2025 vBulletin Solutions, Inc. All rights reserved.