konto usunięte

Temat: Problem z kodowaniem MySQL

Witam,

Może ktoś z Was mi pomoże rozgryźć jeden problem dotyczący kodowania MySQL (i phpmyadmin'a).
Podam link do forum gdzie dokładnie opisałem o co mi chodzi wraz ze screenem: http://forum.php.pl/Problem_z_kodowaniem_MySQL_t76726.... - zawsze lepiej widzieć o czym się pisze :)

Będę wdzięczny za pomoc.Dymitr Doktór edytował(a) ten post dnia 07.09.07 o godzinie 14:30

Temat: Problem z kodowaniem MySQL

>Problem jest w jednym ustawieniu "System kodowania znaków dla MySQL", które statycznie ustawione jest na "UTF-8 Unicode (utf8)" i nie mogę tego zmienić...

Nie bardzo wiem dlaczego nie mozesz zmienic. Majac ISO-8859-2 w meta masz dobre kodowanie. W tym wypadku phpmyadmin powinien byc ustawiony na latin2 general. W pliku php w ktorym nawiazujesz polaczenie w bazie po mysql_select_db wstaw to: mysql_query("SET NAMES latin2;");

Calosc wyglada mniej wiecej tak:


$db = mysql_connect ("adres","login","haslo");
mysql_select_db ("nazwa_bazy");
mysql_query("SET NAMES latin2;");


Powiedz czy pomoglo. Na 99% to pomoze. :)

konto usunięte

Temat: Problem z kodowaniem MySQL

mysql_query('SET NAMES "latin2" COLLATE "latin2_general_ci"');

nazwe charsetow dobierac wedle potrzeb.

konto usunięte

Temat: Problem z kodowaniem MySQL

Widzicie - problem w tym, że to o czym piszecie nawiązuje do kodowania tabel, bądź danej bazy, czyli właśnie systemu porównań. To działa ok - mogę sobie (w tym przypadku) kodowania zmieniać nawet i na języki mołdawskie :)

W tym moim przypadku problem jest w kodowaniu samego silnika MySQL - to w jakiej on formie wysyła znaki (a nie w jakiej formie trzyma w bazie danych) :) Innymi słowy baza trzyma moje dane w tym kodowaniu jakie chce mieć (czyli w latin-2, ISO), jednakże w momencie wysyłania ich na stronę www już wysyła w tym swoim UTF-8, przez co zamiast wszystkich polskich znaków mam symbole "?".

Sam phpmyadmin całe kodowanie ma ok - problem jest tylko z wyrzuceniem tego na jakiś frontend.
Tomasz Wójcik

Tomasz Wójcik inżynier informatyk,
specjalizacja: sieci
komputerowe

Temat: Problem z kodowaniem MySQL

mysql_query('set names latin2 collate latin2_general_ci');
mysql_query('set character set latin2');

i nie wiem co by miało nie działaćTomasz Wójcik edytował(a) ten post dnia 07.09.07 o godzinie 17:12

konto usunięte

Temat: Problem z kodowaniem MySQL

może collate samej tabeli, albo bazy masz inny. phpmyadmin powinien wystarczyc :]

konto usunięte

Temat: Problem z kodowaniem MySQL

hmm... chyba nie o tym samym piszemy. Zatem, zby było bardziej zrozumiale to pokażę na otwartym organiźmie o co chodzi:

http://89.174.120.170 - tutaj problem, o którym piszę i chcę rozwiązać

http://89.174.120.170/phpmyadmin - a tutaj działajcie, i zobaczymy czy coś się uda zmienić :)

Dane do zalogowania do phpmyadmina wyślę na prv.Dymitr Doktór edytował(a) ten post dnia 07.09.07 o godzinie 21:19

konto usunięte

Temat: Problem z kodowaniem MySQL

a moze html_entity_decode?

daj na prv dane do logowania.
Filip Górny

Filip Górny Programista,
webdeveloper.

Temat: Problem z kodowaniem MySQL

Też miewam takie problemy - co zrobić gdy używa się PDO ? Żeby było "abstrakcyjnie"?
Tomasz Wójcik

Tomasz Wójcik inżynier informatyk,
specjalizacja: sieci
komputerowe

Temat: Problem z kodowaniem MySQL

[author]Jakub

konto usunięte

Temat: Problem z kodowaniem MySQL

A jaką masz wartość w config.ini dla vertigoserv w linijce:

$cfg['DefaultCharset']

?
Tomasz Wójcik

Tomasz Wójcik inżynier informatyk,
specjalizacja: sieci
komputerowe

Temat: Problem z kodowaniem MySQL

Anna P.:
A jaką masz wartość w config.ini dla vertigoserv w linijce:

$cfg['DefaultCharset']

?

Poznaje $cfg jako ustawienie w config.inc.php dla phpMyAdmin, ale to jest do rekodowania zapytan w PMA, ale ustawienia PMA nie mają tu nic do rzeczy
http://wiki.cihar.com/pma/Config#DefaultCharset

Abstrachujac: Czy nie lepiej nawet zostawic uniwersalne kodowanie utf8, ktore jest standardem, a w polaczeniach z baza ustawiac latin2 z poziomu php? Ew. proponuje tworzyc strony pod utf8 bo to jest raczej norma (xml domyslnie tak kodowany, xhtml).

Co do zmiany ustawienia systemowego kodowania mysql to probowalem odpalic mysql z przelacznikiem --with-charset=latin2, zarowno na standalone i jako usluge i nic, nie udalo mi sie tez przez plik konfiguracyjny mysql, ale pokombinuje moze jeszczeTomasz Wójcik edytował(a) ten post dnia 08.09.07 o godzinie 21:07

konto usunięte

Temat: Problem z kodowaniem MySQL

Tomku, abstraHując :) od całej reszty, to nie mam na myśli phpMyAdmina, ale wirtualny serwer, którego używa Dymitr. Jeśli dobrze zrozumiałam, to właśnie w tym miejscu pojawiają się krzaki...
Daniel Częstki

Daniel Częstki senior php developer

Temat: Problem z kodowaniem MySQL

uzyj mojej funkcji:

function dbSetCharConversion(&$db, $basetype, $basecharset, $resultcharset) {

switch (strtolower($basetype)) {
case "pgsql":
$q="SET CLIENT_ENCODING TO '$resultcharset';";
$db->query($q);
break;
case "mysql":
$q="SET character_set_client = `$resultcharset`";
$db->query($q);

$q="SET character_set_results = `$resultcharset`";
$db->query($q);

$q="SET character_set_connection = `$basecharset`";
$db->query($q);
break;
}
}

parametr 1: obiekt DB pakietu PEAR
parametr 2: rodzaj bazy danych: "mysql" lub "pgsql"
parametr 3: kodowanie bazy danych
parametr 4: kodowanie docelowe

przyklad: jezeli masz baze mysql i jest ona kodowana w utf8 a strone docelowa masz kodowana w ISO-5589-2 to wpisz tak:

dbSetCharConversion($db, "mysql", "utf8", "latin2")

gdzie $db to obiekt DB pakietu PEAR.
Ewentualnie wyciagnij same zapytania.
pzdr.

aha ustawianie kodowania dziala dla baz mysql od wersji 4.1Daniel C. edytował(a) ten post dnia 08.09.07 o godzinie 21:45
Tomasz Wójcik

Tomasz Wójcik inżynier informatyk,
specjalizacja: sieci
komputerowe

Temat: Problem z kodowaniem MySQL

Anna P.:
Tomku, abstraHując :) od całej reszty, to nie mam na myśli phpMyAdmina, ale wirtualny serwer, którego używa Dymitr. Jeśli dobrze zrozumiałam, to właśnie w tym miejscu pojawiają się krzaki...

Dzięki za poprawkę ort'a ;)
Przez serwer wirtualny rozumiesz Apacha? Jak tak, to powiem, ze jego kodowanie nie ma tu nic do rzeczy.
Daniel C.:
$q="SET character_set_client = `$resultcharset`";
$db->query($q);

$q="SET character_set_results = `$resultcharset`";
$db->query($q);

$q="SET character_set_connection = `$basecharset`";
$db->query($q);

Przecież to wszystko zastępuje 1 zapytanie "SET NAMES latin2", więc po co 3 zapytania jak można jedno (z resztą padło już ono kilka razy).

Aczkolwiek z mojej rozmowy na privie widze, ze autorowi chodzi o przestawienie systemowego kodowania bazy. Chce to zrobic raz na zawsze, zeby baza odpalala sie juz z tym kodowaniem, a nie zmieniac go w zapytaniu z php, choc zmiana z utf8 na latin2 to dla mnie cofanie sie troche w rozwojuTomasz Wójcik edytował(a) ten post dnia 08.09.07 o godzinie 22:14
Daniel Częstki

Daniel Częstki senior php developer

Temat: Problem z kodowaniem MySQL

jezeli ma to byc zrobione raz na zawsze to proponuje w pliku konfiguracyjnym mysql: bin/my.cnf ustawic:

character-set-server = utf8
collation-server = utf8_polish_ci

jezeli chodzio moja funkcje, to jest ona celowo tak napisana, aby można było zobaczyc co i jak ;)Daniel C. edytował(a) ten post dnia 09.09.07 o godzinie 05:57

konto usunięte

Temat: Problem z kodowaniem MySQL

Wow - dzień mnie nie ma i jaka dyskusja... :)

Podsumowując całą tutejszą rozmowę, to zdaję sobie sprawę, ze można zostawić domyślne kodowanie i robić w nim strony, ale to jest pewna ucieczka od problemu i do tego odnosi się dopiero do nowotworzonych stron - a co np z 10 już istniejącymi 20MB bazami danych?? Zależy mi na tym, żeby mieć środowisko jak na innym serwerze i dlatego szukam takiego rozwiązania.

Teraz co do różnego rodzaju skryptów, wymuszania kodowania poprzez strony itp. - To również jest "wyminięcie" problemu ponieważ nienaturalnie wymuszam kodownie na stronie. Pisząc "nienaturalnie" mam na myśli to, że muszę jakimiś innymi metodami osiągnąć cel, który równie dobrze może byś osiągnięty przez odpowiednią konfigurację serwera (której to właśnie poszukuję :)).

Co do propozycji Daniela - już próbowałem tych metod - nie działa. A, i mi zależy na kodowaniu latin-2 (iso 8859-2), a od UTF'a właśnie chcę uciec.

Z tego co już pogooglowałem, poszperałem na innych forach to tak ajk pisałem wcześniej - problem dotyczy kodowania MySQL'a w momencie wyrzucania z niego danych na jakąś stronę php - i tylko w tym przypadku. Problem nie dotyczy trzymania danych w samej bazie - tam są wyświetlane prawidłowo. Problem też nie dotyczy kodowania samej strony php, ponieważ na innym serwerze wszystko śmiga - strona w META ma podane właśnie iso-8859-2.

Wszystko (przynajmniej na tyle co mi się wydaje) w plikach config, my.ini itd. itp. już chyba poprzestawiałem - szczególnie te opcje, co by mogły wydawać się na standardowe, typu: character-set-server, $cfg['DefaultCharset'] itp.

Poszukuję rozwiązania globalnego, które gdy raz zmienię (w jakimś pliku) na zawsze będzie trzymał kodowanie latin-2 w mojej bazie MySQL.

Dzięki jeszcze raz za dyskusję i wskazówki i... poszukuję dalej :)Dymitr Doktór edytował(a) ten post dnia 09.09.07 o godzinie 17:03
Daniel Częstki

Daniel Częstki senior php developer

Temat: Problem z kodowaniem MySQL

aha.
PHP standardowo ma ustawione SET NAMES latin1. To znaczy zapytanie to jest wysylane do bazy w momencie wykonywania polaczenia. Niestety nie jest to nigdzie napisane w oficjalnym podreczniku ;)

Jezeli chodzi o moje funkcje.
Włąsnie to jest problem - wyrzucanie danych przez MySQL, gdyż MYSql zawiera sam w sobie funkcje do konwersji kodowania ktore wykorzystuje.
Jezeli łączysz sie przy pomocy PHP to tak jak napisalem wyzej znaki beda pobierane w latin1. Jezlei baza jest kodowana w latin2 to nie powinno byc problemu ale z tym jest roznie.

A mozesz zapodac ustawienia serwera ?

konto usunięte

Temat: Problem z kodowaniem MySQL

No i chyba nikt nie pomoże w tym problemie... :(

To może korzystając z okazji zapytam Was o pewne źródło, z którego mógłbym pobrać phpmyadmin'a, MySQL'a oraz Apache'a w jednej z nowszych wersji, uwzględniającego moją potrzebę kodowania w latin-2 :)
Adrian Pastuszek

Adrian Pastuszek Specjalista PHP,
Rybnik, Śląsk,
Zdalnie

Temat: Problem z kodowaniem MySQL

miałem podobny problem...

Zrobiłem tak:
SET character_set_server = latin2
SET names "latin2"

i podziałało... Przy czym character_ser_server musi być przed names... Jakby co możesz pisać na priv... Może coś pomogę więcej...



Wyślij zaproszenie do