Pokolei:
Ważne jest aby MySQL wiedział jakim kodowaniem operuje klient. Jeśli klient sam nie przesyła informacji o kodowaniu, MySQL wtedy przyjmuje kodowanie domyślne czyli latin1 (iso-8859-1) - można to domyślne kodowanie zmienić w pliku konfiguracyjnym.
W Twoim przypadku - jeśli php czy konsola mysql nie przekazuje informacji o kodowaniu, a można przyjąć, że nie przesyłają (bo same z siebie tego nie robią), MySQL przyjmuje, że wszystkie zapytania jakie od nich dostaje są w latin1 i tak samo zachowuje się w drugą stronę (przy zwracaniu danych na zapytanie). To jest trochę zwodnicze, bo mimo danych zapisywanych do bazy w nie właściwym kodowaniu, można odnosić wrażenie, że jest wszystko ok.. ale dopóki własnie nie spróbuje się pobrać danych poprzez interfejs operujący w innym kodowaniu.
Na przykładzie (który najprawdopodobniej odzwierciedla co się dzieje w Twoim przypadku):
Dodawanie danych
- php przesyła znaki do wprowadzenia do bazy w kodowaniu iso-8859-2
- Jako, że php nic nie mówi o kodowaniu w jakim pracuje, MySQL przyjmuje je jako znaki w kodowaniu iso-8859-1 i przekazuje je do tablicy.
- Zakładamy, że tablica ma domyślne kodowanie ustawione na iso-8859-1 (gdyby było inaczej sprawa by była nieco bardziej skomplikowana). Dane w takiej formie jakiej zostały otrzymane są zapisane do tablicy.
Pobieranie danych:
- php wysyła zapytanie do bazy (pominę już tłumaczenie kodowania samego zapytania, które wygląda tak samo jak wyżej).
- Baza przyjmując, że php pracuje w kodowaniu iso-8859-1, jak i biorąc pod uwagę to, że kodowanie tabeli to też iso-8859-1 przesyła dane z tabeli bez żadnej konwersji do php
Reasumując - dane z php są bezpośrednio bez żadnej konwersji zapisywane w bazie danych i podobnie są pobierane - czyli nie dziwne, że dodając i czytając dane z bazy tylko poprzez php wszystko wygląda ok.
Teraz załóż (bo tak też zapewne jest), że konsola mysql pracuje w innym kodowaniu (jeśli to na windowsie to zapewne jest to win-1250) i podobnie jak php nie przesyła danych do mysql na temat kodowania w jakim pracuje. Wtedy dzieje się dokładnie to samo co opisałem wyżej i logiczne jest, że konsola pobierając dane zapisane przez php otrzyma szlaczki i wice wersa.
Aby wszystko razem mogło współgrać serwer mysql musi wiedzieć w jakim kodowaniu pracuje klient a to możesz osiągnąć tylko poprzez odpowiednie informowanie serwera mysql (poprzez 'SET NAMES' właśnie).
Najprawdopodobniej w przypadku php przed jakimikolwiek operacjami powinieneś przesłać:
SET NAMES 'latin2'
a w przypadku konsoli mysql na windowsie:
SET NAMES 'cp1250'
Upewnij się, że faktycznie to są te kodowania, bo jeśli jest inaczej to na pewno będzie kaszana.
Dane, które zapisałeś do bazy uprzednio, bez informowania bazy o kodowaniu usuń albo przekonwertuj... bo teraz podchodząc właściwie do sprawy będziesz dostawał w nich krzaczki.