I wykonałem zapytania do bazy oraz tabeli ustawiając kodowanie na utf8, bo i z takiego korzystam dalej w skrypcie.
Mimo wszystko, po zmodyfikowaniu rekordów, polskie znaki, które miały się pojawić są zamieniane na ‘???’, oprócz litery ‘ó’. Zmian dokonuję i bazę przeglądam używając phpmyadmin’a.
SET NAMES utf8;
INSERT INTO tab (`pole`) VALUES 'ąęźśćś';
SELECT `pole` FROM tab LIMIT 1;
#2
SET NAMES latin2;
INSERT INTO tab (`pole`) VALUES 'ąęźśćś';
SELECT `pole` FROM tab LIMIT 1;
Obejmij kodem PHP te zapytania i sprawdź które daje dobry wynik. Jeśli 1. to jest coś źle ustawione w phpMyAdminie, jeśli #2 to raczej nie możesz ustawić domyślnego kodowania (dziwne by to było)
A w strukturze tabeli w kolumnie “Metoda porównywania napisów” jaką masz wartość? Oraz na starcie w polu “System porównań dla połączenia MySQL”?
Otóż na starcie miałem utf8_general_ci, w opcjach/strukturze tabel (wszystkich, które mam) również.
Jednakże w strukturze danej tabeli cały czas (pomimo zapytań) miałem latin1, więc zmieniłem ręcznie i działa.
Jeszcze mam jedno pytanie.
Jakie kodowanie ustawić w bazie lub co dodać do kodu html/php, aby poprawnie wyświetlało znaki pobrane z bazy - po odpaleniu skryptu, który dane pobierze i wyświetli. W bazie wszystko ustawiłem na utf8_general_ci, a w dokumencie mam deklarację:
Mimo wszystko pobrane z bazy ‘ąśżźćłę’, wyświetla jako ‘???’.
“?” z reguły oznacza że tak samo jest w bazie, czyli polskie literki zmieniły znak na “?” ponieważ w latin1 nie ma takich znaków. Gdybyś miał w bazie Latin2 a w kodzie UTF lub na odwrót to były by krzaczki a nie “?”.
Ja masz kombinację domyślnego kodowania oraz rzeczywistego kodowani Latin1<->UTF-8 lub Latin1<->Latin2 to są “?”, ale trzeba się o to postarać. Najczęstszy błąd to Latin2<-> UTF8 i wtedy właśnie wychodzą dwu znakowe krzaki zamiast jednego polskiego znaku.