2011-11-01 26 views
6

Attualmente sto riscontrando un problema nel salvataggio di caratteri speciali (® & ©) in un database mySQL.Salvataggio di caratteri speciali nel database MySQL

Su uno stack locale (locale al mio computer di sviluppo) l'operazione funziona senza intoppi e ciò che viene inserito nel front-end viene salvato come previsto.

Con lo stesso codice di front-end sul server centralizzato quando si salva nel DB il carattere viene gestito con altri caratteri, viene salvato come ®. Questo non è un problema quando si visualizza il record sul front-end perché inverte ciò che fa e visualizza correttamente.

Il problema deriva da un altro sistema separato che utilizza lo stesso database e non presenta alcuna alterazione, quindi appare come ® invece di semplicemente ®.

Il motivo della mia confusione è che sembra funzionare come richiesto sul mio stack locale ma non sul server centralizzato.

Sto cercando idee su cosa cercare che potrebbe causare questo sulla configurazione dei server rispetto al mio locale.

Grazie in anticipo Mark

+0

dimenticato di aggiungere il front-end è scritto in PHP. – MarkJWiggins

+1

Verificare che la codifica predefinita di php, la codifica della connessione mysql e la tabella mysql e le regole di confronto dei campi siano uguali. –

+0

+1 Pranav copre la maggior parte delle cose - sicuramente è necessario farlo. – therobyouknow

risposta

1

dopo aver selezionato il DB nel codice php aggiungere questo:

mysql_query("set names 'utf8'"); 

controllare anche se la colonna in cui memorizzare il testo ha la codifica utf8.

+0

+1 @Saaica Mircea, grazie. Vale la pena considerare per alcuni scenari. Anche se questo potrebbe non essere richiesto per il problema originale dell'OP in quanto sono stato in grado di riprodurlo e fornire una soluzione senza richiedere mysql_query ("set names 'utf8'"); Ma questo può essere utile per altri scenari. Grazie ancora. – therobyouknow

2

@Pranav Hosangadi (grazie) copre tre aree per verificare la coerenza della codifica. La seguente soluzione si aggiunge a ciò. Potrebbe anche valere la pena considerare (una variazione di) la risposta di @Saaice Mircea (grazie anche) per alcuni scenari in cui questa risposta non risolve il problema anche se questo non era necessario quando ero in grado di riprodurre e trovare una soluzione al tuo problema . @ La linea di pensiero di Pranav sembra avere successo per questo problema in quanto riguarda la coerenza dell'uso di un set di caratteri ovunque anziché di uno specifico.

cinque cose da fare:

  1. assicurano charset database e le tabelle utilizzano lo stesso set di caratteri in tutto, controllare questo in phpMyAdmin, per esempio, nota e questo charset per applicazioni inferiori

  2. uso intestazione php() funzione con banca dati charset ad esempio:

    header('Content-Type: text/html; charset=latin1_swedish_ci');
  3. inserto meta tag nell'intestazione html ad esempio:

    <meta http-equiv="content-type" 
    content="text/html;charset=latin1_swedish_ci">
  4. aggiungere charset-accettare nel tag form

    <form action=\"testsubmit.php\" method=\"post\" accept-charset=\"latin1_swedish_ci\">
  5. set charset di connessione MySQL ad es .:

    $con = mysql_connect("localhost","test","test");  
    mysql_set_charset ("latin1_swedish_ci", $con); 
    
+0

Una cosa peculiare osservata è che il punto 5 sopra, l'impostazione della connessione mysql, potrebbe non funzionare altrove sullo stesso server, "" Impossibile inizializzare il set di caratteri latin1 "essendo il messaggio di errore visto.Visto anche su software non correlato qui: http: //bugs.kde.org/226960 Un suggerimento in questa discussione è: uno di voi può cercare in/usr/share/mysql/charsets e segnalare se c'è un file "latin1.xml" lì? via questa risposta anche se questa potrebbe essere una idiosincrazia isolata del mio setup. – therobyouknow

Problemi correlati