2012-01-16 12 views
9

Mam bazę danych, która jest uft8_general_ci, tylko problem jest do tego momentu aplikacja zakodowana przez poprzedniego programistę wydaje się pracować z bazą danych w latin-1.latin-1 do utf-8 bazy danych

Od tego czasu zmieniłem sposób, w jaki aplikacja korzysta z bazy danych i może teraz przechowywać umlaut jako umlaut zamiast ü. Problem polega na tym, że aplikacja odczytuje wcześniej istniejące dane z bazy danych jako (przykład) "Süddeutsche" zamiast "Süddeutsche".

Czy mimo to można konwertować dane z bazy danych z jednego formatu na inny?

Pozdrowienia

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; 

Ten pracował dla mnie.

+0

możliwy duplikat [Jak poprawić dwukrotnie zakodowane ciągi UTF-8 znajdujące się w polach 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

Dziękuję, niezupełnie tak samo, ale odpowiedź działa! – mr12086

+0

Po kilku testach, jeśli uruchomię to 2x w niektórych kolumnach, dane zostaną przerwane - wszystkie dane po określonym znaku/punkcie zostaną utracone. Czy dzieje się tak po prostu dlatego, że uruchomiłem polecenie 2x, czy też jest zmiana jego rozbicia wielu danych w bazie danych? – mr12086

Odpowiedz

2

Można spróbować SET NAMES pozwolić mówić bazy danych w latin-1 z aplikacji podczas przechowywania w utf-8 lub trzeba będzie przekształcić wszystkie dotychczasowe zestawów danych do utf-8 -Strings

2

spróbować

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

i

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'; 

nie zapomnij wymienić "ß":

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