W tym poście chciałam opisać coź z czym ostatnio miałam do czynienia w pracy, mianowicie usuwanie "brzydkich" znaków ze słów w tabeli, które kiedyś "wkradły się" do niej poprzez złe kodowanie w aplikacji.
Na wszelki wypadek zrobiłam kopie tej tabeli, a następnie mając listę znaków do zamiany, wykonałam następujące polecenia:
UPDATE slowa_clean SET slowo = REPLACE(slowo,'?','ż');UPDATE slowa_clean SET slowo = REPLACE(slowo,'e','ę');UPDATE slowa_clean SET slowo = REPLACE(slowo,'±','ą');UPDATE slowa_clean SET slowo = REPLACE(slowo,'3','ł');UPDATE slowa_clean SET slowo = REPLACE(slowo,'n','ń');UPDATE slowa_clean SET slowo = REPLACE(slowo,'¶','ś');UPDATE slowa_clean SET slowo = REPLACE(slowo,'a','ć');UPDATE slowa_clean SET slowo = REPLACE(slowo,'1','ź');UPDATE slowa_clean SET slowo = REPLACE(slowo,'—','Ż');UPDATE slowa_clean SET slowo = REPLACE(slowo,'E','Ę');UPDATE slowa_clean SET slowo = REPLACE(slowo,'!','Ą');UPDATE slowa_clean SET slowo = REPLACE(slowo,'L','Ł');UPDATE slowa_clean SET slowo = REPLACE(slowo,'N','Ń');UPDATE slowa_clean SET slowo = REPLACE(slowo,'¦','Ś');UPDATE slowa_clean SET slowo = REPLACE(slowo,'A','Ć');
Z uwagi na to, że w mojej tabelce pojawiło się kilka zdublowanych słów (niektóre dobre dodały się już w obecnym dobrym kodowaniu), należało pozbyć się zduplikowanych wierszy, aby to zrobić stworzyłam nową tabelę i wykonałam następujące polecenie:
INSERT INTO slowa_clean2 SELECT * FROM slowa_clean GROUP BY slowo;Na końcu podmieniłam nową tabelkę ze zmianami, a starą zachowałam pod inną nazwą (na wszelki wypadek ;) ). Natomiast tabelkę roboczą slowa_clean usunęłam.
RENAME TABLE slowa TO slowa_old;
RENAME TABLE slowa_clean2 TO slowa;
Oczywiście najlepiej pilnować, aby w ogóle nie musieć tego robić, czyli dbać o prawidłowe wprowadzanie danych do bazy :P