2012-01-16 15 views
9

Ho un database che è uft8_general_ci, solo il problema è fino a quando un'applicazione codificata da uno sviluppatore precedente sembra aver lavorato con il database in latin-1.database da latin-1 a utf-8

Da allora ho cambiato il modo in cui l'app utilizza il database e ora può memorizzare una umlaut come una dieresi invece di ¼. Il problema ora è che l'applicazione legge i dati precedentemente esistenti dal database come (esempio) 'Süddeutsche' invece di 'Süddeutsche'.

Esiste comunque la possibilità di convertire i dati all'interno del database da un formato all'altro?

saluti

Edit:

ALTER TABLE TableName MODIFY ColumnName ColumnType CHARACTER SET latin1; 
ALTER TABLE TableName MODIFY ColumnName ColumnType CHARACTER SET binary; 
ALTER TABLE TableName MODIFY ColumnName ColumnType CHARACTER SET utf8; 

Questo ha funzionato per me.

+0

possibile duplicato di [Come correggere stringhe UTF-8 con doppia codifica che si trovano nei campi MySQL utf8_general_ci?] (Http://stackoverflow.com/questions/5951871/how-to-correct-double-encoded-utf-8 -strings-sitting-in-mysql-utf8-general-ci-fie) –

+0

Grazie, non proprio la stessa cosa ma la risposta funziona! – mr12086

+0

Dopo alcuni test, se eseguo questo 2x su alcune delle mie colonne, i dati si interromperanno: tutti i dati dopo che un particolare carattere/punto è stato perso. È semplicemente perché ho eseguito il comando 2x, o c'è un cambiamento che interrompe i miei dati in tutto il database? – mr12086

risposta

2

Si potrebbe provare SET NAMES di lasciare che il discorso database in latin-1 con l'applicazione durante la memorizzazione in utf-8 o hai bisogno di convertire tutti i set di dati precedenti per utf-8 -Strings

2

provare

ALTER DATABASE your_db DEFAULT CHARACTER SET = 'utf8' COLLATE 'utf8_unicode_ci'; 

e

ALTER TABLE a CONVERT TO CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'; 

ALTER TABLE b CONVERT TO CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'; 
ALTER TABLE c CONVERT TO CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'; 

non dimenticare di sostituire "ß":

UPDATE a SET field_1 = REPLACE(field_1, 'ß', 'ss') WHERE label LIKE '%ß%'; 
Problemi correlati