Codifica caratteri Mysql

Ho u probelma di codifica caratteri:

database Mysql con codifica Latin1.

Quando vado a inserire un valore accentato ti ò

nel DB mi trovo questo valore: ò

il campo è text.

se poi traduco il campo con htmlentities vedo il carattere giusto, ma io volgio che mi inserisca un carattere normale, non un 'entità nel db.

inviato 8 anni fa
ilbonzo
X 0 X

con cosa verifichi il contenuto del DB?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

cioè?

risposto 8 anni fa
ilbonzo
X 0 X

Hai detto che nel database vengono memorizzati strani caratteri, come li hai visti?

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

scusa....  :-[ li vedo da sqlyog

risposto 8 anni fa
ilbonzo
X 0 X

che tipo di charset vuoi usare per il sito, latin1 (ISO-8859-1)?

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Il db era postgres, passato a Mysql.

Devo usare sempre Latin1, come era su Postgres.

ecco cosa mi dice sqlyog di una tabella:

Field                Type         Collation          Null    Key     Default  Extra           Privileges                       Comment
-------------------  -----------  -----------------  ------  ------  -------  --------------  -------------------------------  -------
id_richiesta         int(10)      (NULL)             NO      PRI     (NULL)   auto_increment  select,insert,update,references         
descrizione          text         latin1_swedish_ci  YES             (NULL)                   select,insert,update,references         
     

/*Index Information For - interventi_test.richieste*/
-----------------------------------------------------

Table      Non_unique  Key_name  Seq_in_index  Column_name   Collation  Cardinality  Sub_part  Packed  Null    Index_type  Comment
---------  ----------  --------  ------------  ------------  ---------  -----------  --------  ------  ------  ----------  -------
richieste           0  PRIMARY              1  id_richiesta  A                 1296    (NULL)  (NULL)          BTREE              

/*DDL Information For - interventi_test.richieste*/
---------------------------------------------------

Table      Create Table                                         
---------  -----------------------------------------------------
richieste  CREATE TABLE `richieste` (                           
             `id_richiesta` int(10) NOT NULL auto_increment,    
             ................          
            `descrizione` text,                                
             PRIMARY KEY  (`id_richiesta`)                      
           ) ENGINE=InnoDB DEFAULT CHARSET=latin1               

Il campo descrizione mi da errore.

Prima avevo sbagliato e il DB lo avevo messo utf8, ma mseeo latin1 il problema rimane.

risposto 8 anni fa
ilbonzo
X 0 X

Se scrivo sullo stesso DB con questa semplice pagina:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title></title>
    </head>
    <body>
        <?php 
            //USO le eccezzioni
           
            $string_dsn = 'mysql:'; // mysql
            $string_username = '';
            $string_password = '';
            try {
              $mypdo = new PDO($string_dsn, $string_username, $string_password);
            }
            catch(PDOException $e) {
              echo 'Errore di connessione: '.$e->getMessage();
            }

            
            $mypdo->beginTransaction();
            // preparo la query
            //$stpdo = $mypdo->prepare("INSERT INTO test (descrizione) VALUES (?)");
            $stpdo = $mypdo->prepare("INSERT INTO richieste (descrizione) VALUES (?)");
            $stpdo->execute(array('ò à è ù ì '));
            $stpdo->execute(array('ò è ì à ? '));
            $mypdo->commit();
        ?>
    </body>
</html>

Non ho problemi....

quindi credo che il problema non sia nel db...

risposto 8 anni fa
ilbonzo
X 0 X

La pagina contenente il form di inserimento dei dati che charset specifica?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
         echo "<!DOCTYPE simo html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
         echo "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"it\" dir=\"ltr\">\n";
         echo "<head>\n";
         echo "\t<meta http-equiv=\"content-type\" content=\"text/html; charset=iso-8859-1\" />\n";

ho  provato a toglierlo come nell'esempio di prima ma mi inserisce sempre i caratteri sbagliati nel DB...

risposto 8 anni fa
ilbonzo
X 0 X

Il server aveva una codifica di default e guardando da firefox ho notato che  mi metteva sempre utf8.

all fine ho visto che se sul server metto la direttiva:

AddDefaultCharset ISO-8859-1

mi considera questo e funziona.

Il problema è nato perché su Debian era di default, mentre su CentOS ho utf8.

Ma se sul server è impostato in un modo posso cambiarlo io tramite php?

risposto 8 anni fa
ilbonzo
X 0 X

forse con un file .htaccess

oppure prova a mandare un header del tipo:

header('Content-type text/html; charset=iso-8859-1');

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
modificato 8 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda