MySQL, krzaki w bazie po dodaniu rekordów z PHP


(Alan Elektro) #1

Witam!

Mam skrypt tworzący komentarze (w sumie jest to część większego skryptu do gier online). Niestety po wpisaniu jakiegokolwiek komentarza z polskimi znakami, zarówno w bazie jak i na stronie widzę same " ????? ". Próbowałem w bazie zmieniać na różne metody porównywania wpisów (i latin2, unicode utf, windows 1250).

Próbowałem również po połączneiu z bazą dopisywać linijki tego typu:

mysql_query("set names utf8");

mysql_query("set collation_connection=utf8");

różne i z UTF8, takie jakie znalazłem w Internecie,bo pamiętam że kiedyś mi pomogło.

Co mogę jeszcze zrobić? Kodowanie pliku PHP z którego wysyłany jest komentarz - nawet nie będę nic kombinował bo nie ma sensu ponieważ w phpMyadmin widać same znaki zapytania w tabelce, więc nie ma żadnego sensu, ale dodam że ten plik zapisywałem w różnych kodowania dla penwności , ale nadal było to samo. Stronę ustawioną mam obecnie na kodowanie 1250, ale to bez róznicy bowiem tak jak wcześniej pisałem w SQL są krzaki.

Dodam że nie chce zmieniać kodowania całej bazy, tylko najwyżej jednej tabelki, bowiem w jednej bazie mam zainstalowanych kilka skryptów.

Dziękuje za ewentualne odpowiedzi

pozdrawiam.


(Krzkaczor) #2

Musisz wszędzie mieć jedno kodowanie. Proponuje UTF-8. Ustawiasz takie w swoim edytorze, takie dajesz w i potem

mysql_query("set names utf8");

. I powinno działać.


(adpawl) #3

A no bywa tak, że strona ma inne kodowanie, tabele inne, sam phpmyadmin inne, a główne kodowanie mysql'a jest jeszcze inne - i potem krzaki wyłażą tu albo tam.

SyntaxError ma rację, najlepiej ujednolicić kodowanie przechodząc na utf-8 - tj. zmieniasz kodowanie strony i tabel bazy ...domyslnego kodowania phpmyadmina na servie raczej nie zmienisz, domyślnego kodowania mysql'a raczej też nie - zatem trzeba by wtedy korzystać z ww. set_names, które wzucasz bezpośrednio po każdym nawiązaniu połączenia z bazą.

btw. Czasem może zaistnieć też konieczność konwersji kodowania ...tu poczytaj np. o ICONV http://pl.php.net/manual/pl/function.iconv.php


(Alan Elektro) #4

niestety nic nie pomogło

w phpMyAdmin są same znaki zapytania, prócz literki "ó", na stronie to samo...

nie wiem czy coś da ta konwersja skoro są same znaki zapytania prócz "ó" na polskich znakach, ech... wolałbym gdyby były krzaki, z krzakami to by sobie poradziło, ale tutaj same znaki zapytania konwersja nie wiele pomorze, nie odróżni znaków, nie zamieni...

te dane które są już wpisane w bazę są UTRACONE, ponieważ jeżeli są znaki zapytania oznacza to że już nie da się nic z nimi zrobić, więc problem jest z połączniem... na XAMPP na moim komputerze jest dobrze, na webd.pl już nie...

UDAŁO SIĘ!

użyłem tego:

mysql_query("/*!40101 SET character_set_client = latin1 */;");

mysql_query("/*!40101 SET character_set_connection = latin1 */;");

mysql_query("/*!40101 SET character_set_server = latin1 */;");

mysql_query("/*!40101 SET character_set_results = NULL */;");

(Maniekz1985) #5
mysql_query("/*!40101 SET character_set_results = NULL */;");

Może mi ktoś w RACJONALNY sposób wyjaśnić dlaczego po dodaniu tej linijki(pomijam zapytanie, które jest w komencie) mam polskie znaki na stronie ?

Wcześniej robiłem dump'a bazy z serwa na lokal(webserv, xampp) i znaki się waliły w niektórych miejscach, a po dodaniu tego kawałka w index.php jest wszystko ok o.O

Edit:

Dobra, nie ważne, już chyba wiem o co loko.


(Pawel95ladny) #6

Ja mam inny problem. Otóż jestem początkujący w tworzeniu stron. Stronę dodałem na serwer, czyli już jest w necie. Chciałbym dopisać trochę treści do strony, ale gdy pojawiają się znaki typu ą ś ć ó ń ł itd... to wyskakują mi inne znaki np znak zapytania itp... Jak to mam naprawić ? Oczywiście mam wklejoną linijkę . Proszę o szybką odpowiedź :slight_smile:


(athei) #7

Ja bym Ci radził korzystać z UTF-8, pamiętaj o odpowiednim kodowaniu pliku (np. notepad++ menu Format/Encode in utf-8 without boom, z iso na utf przekonwertuj wybierając Convert to utf-8 without boom).