[MySQL] wyświetlanie polskich znaków jako '?'

Witam,

moim problemem jest brak możliwości dodania polskich znaków do bazy.

Gdy próbuję edytować jakiś rekord, baza wypluwa mi:

Czytałem ten temat:

http://wortal.php.pl/wortal/artykuly/pomysly_porady_sugestie_dobre_nawyki/polskie_znaki_a_mysql

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.

Proszę o pomoc w rozwiązaniu problemu,

Pozdrawiam.

#1

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”?

Dziękuję za odpowiedź.

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 ‘???’.

Dzięki za pomoc,

Pozdr.

Po połączeniu wpisać w kod

mysql_query('"SET NAMES utf8");

zawsze działa.

“?” 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 “?”.

Racja - zadziałało i u mnie. :wink:

Dziękuję jeszcze raz za pomoc,

Pozdrawiam.

W takim razie ja mam wielkie szczęście do wyjątków :wink:

W około 80% przypadków, gdzie na stronie były “?”, w bazie były krzaczki.

A tych przypadków było na pewno ponad 30 (pewnie znacznie więcej, ale już nie liczę).

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.