Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kodowanie do bólu
Forum PHP.pl > Forum > Bazy danych > MySQL
kaitux
Witam,
temat powracający na forum nieustannie, mianowicie chodzi o kodowanie w bazie. Jakiś czas temu zacząłem stawiać sobie nowy serwerek od podstaw. Przyszedł czas na przeżucenie baz danych. Na początku w myadminie miałem krzaki ale po dokonaniu kilku zabiegów jest wszystko ok. Problem polega jednak na tym, że na stronie dane pobierane z bazy zamiast polskich znaków mają "?". Przeglądam baze przez myadminia i wszystko jest ok, są polskie znaczki, edytuje i nadal wszystko jest ok ale przez moją stronkę już ok nie jest. Nie mam pojęcia dlaczego tak się dzieję. Prosz o pomoc.
Pzdr

A dziwne bo przeciez czym innym jest myadmin jak nie strona www. Tak więc wygląda mi to na problem z samym kodowaniem strony. Kiedy zmienie w myadminie język z pl na en to wszystkie polskie znaki zmieniają się na "?" tak jak na mojej stronie. Tak więc wychodzi na to, że niby kodowanie strony jesst nie takie jak powinno :/ a mam iso-8859-2
pafka
na stronie po polaczeniu sie z baza wykonaj jeszcze

mysql_query("SET NAMES LATIN2");

i zobacz czy dziala
kaitux
Teraz jest ok. Tylko dlaczego kiedy caly skrypt stal na starym serwerze to wszystko latalo bez dodatkowych zapytan? Czy jest to zwiazane z nowa wersja mysql?

A wlasnie smile.gif zapomnialem: dziekuje bardzo, teraz jest ok, wielki PLUS dla Ciebie.

Jak sie okazuje Twoj sposob dziala ale nie do konca. Kiedy dodam zapytanie do skrypciku na szybkiego dla testu wyciagajacego dane z bazy dziala ok. Jednakze nie pomaga to w przypadku projektu ktory tworze :/ w ktorym bedzie juz kilka tysiecy zapytan. Nie pomaga nawet jak dam mysql> SET CHARACTER SET latin2;
Ten patent dziala w przypadku jednego pliku testowego ale nie w przypadku projektu, niewiedziec czemu.

Ok niby działa, problem polega na tym że takie ekstra zapytanie musiałbym wykonywać przed każdym pobieraniem danych z bazy, a jak już pisaem w całym skrypcie mam kilka tysięcy takich zapytań. Może wie ktoś jak tą sprawę uprościć?
pafka
widocznie na starym serwerze baza byla tak skonfigurowana ze domyslnym kodowaniem bylo latin2

na nowym widocznie jest inne ( np: jakis "swedish" smile.gif) i dlatego po polaczeniu trzeba przestawic "kodowanie bazy"

nie za bardzo rozumiem o co chodzi z "plikami tekstowymi" i projektem ...

mam nadzieje ze wszystkie Twoje skrypty korzystaja z tego samego polaczenia z baza ( a nie w kazdym masz osobno zdefiniowane nowe polaczenie questionmark.gif jesli masz w kazdym osobno, to w kazdym skrypcie musisz dodac "SET NAMES ..." .. a najlepiej przerobic skrypty by mialo wspolne polaczenie np: poprzez klase krora sie laczy z baza w oparciu o dane ktore masz w jakims piku konfiguracyjnym)

ewentualnie mozesz miec taki problem, ze czesc tabel masz zadeklarowane jakie inne kodowania, a dane w nich trzymasz w latin2 ... wtedy baza moze zglupiec przy konwersji

jesli masz dostep do serwera DB i mozesz w nim zmienic konfiguracje, to zmien na defaultowe kodowanie na latin2 ...
kaitux
mam konfiga db.ini.php i tu ma zadeklarowane co trzeba zeby sie polaczyc.
potem daje tylko require_once('db.ini.php');
rzeczywiscie serwer mial zadeklarowane swdish wiec mu to pozmienialem ale po restarcie skubaniec spowrotem przywraca do domyslnych. wyglada to tak:

+---------------------------------+-----------------------------+
| Variable_name | Value |
+---------------------------------+-----------------------------+
| character_set_client | latin2 |
| character_set_connection | latin2 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin2 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | latin2_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |


chodzilo mi o plik testowy a nie tekstowy smile.gif kozystal z tego samego polaczenia co caly projekt
pafka
dokladnie jak ustawic konfiguracje bazy poszukaj w manualu

a sprawdz jeszcze jakie kodowania masz ustawione dla tabel, czy wszedzie takie samo czy rozne questionmark.gif

require_once('db.ini.php'); <- tutaj masz zawarte tez "set names" questionmark.gif
kaitux
DEFINE ('DB_USER', ***');
DEFINE ('DB_PASSWORD', '******');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', '*****');
$dbc = @mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) OR die (header ("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/access_denied.php"));
@mysql_select_db (DB_NAME) OR die (header ("Location: http://" . $_SERVER['HTTP_HOST'] .dirname($_SERVER['PHP_SELF']) . "/access_denied.php"));
mysql_query("SET NAMES LATIN2");

powyzej zawartosc pliku db.ini.php. Tak wiec jesli dodam do tego pliku "SET NAMES..." to nie dziala, jednak jesli dodam "SET NAMES..." bezposrednio przed selectem to dziala, i badz tu madry...

kodowanie dla tabel jest takie same latin2_general_ci

Ok w koncu poszlo smile.gif
modyfikowalem nie ten db.ini (az wstyd sie przyznac), bo okazalo sie ze w podkatalogu modules mam jeszcze jedno db.ini smile.gif
jednakze faktem jest ze zadne charset ani SET charset i tym podobne zabiegi sugerowane przez mysql.com nie pomogly

pafka dzieki wielkie za pomoc i za Twoj poswiecony czas
pafka
hmm a jak tak zmienisz questionmark.gif

$dbc = @mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) OR die (header ("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/access_denied.php"));
@mysql_select_db (DB_NAME, $dbc) OR die (header ("Location: http://" . $_SERVER['HTTP_HOST'] .dirname($_SERVER['PHP_SELF']) . "/access_denied.php"));
mysql_query("SET NAMES LATIN2", $dbc);


przez phpmyadmina we wszystkich tabelach widzisz polskie znaki questionmark.gif czy sa gdzies krzaczki questionmark.gif

Cytat(kaitux @ 28.12.2007, 12:38:39 ) *
Ok w koncu poszlo smile.gif
modyfikowalem nie ten db.ini (az wstyd sie przyznac), bo okazalo sie ze w podkatalogu modules mam jeszcze jedno db.ini smile.gif


smile.gif))
czerwony2
witam
mam problem z kodowaniem w mysqlu
polega on na tym ze jak dodaje jakieś dane do bazy za pomocą formularza na str to polskie znaki zapisują sie w postaci krzaczków, ale z kolei jak to robie za pomocą drugiego formularza i zapisuje dane do tej samej bazy ale juz innej tabeli za pomocą tej samej funkcji gerenrujacej połączenia to dane zapisują się normalnie w postaci polskich znaków. Dlaczego tak jest, czego to może być wina? Dodam jeszcze że wszczedzie mam Metoda porównywania napisów: latin2_general_ci.
Pozdrawiam
pafka
a jakie kodowania sa ustawione w obu formularzach ?
czerwony2
Rzeczywiście problem był w kodowaniu formularzy dzięki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.