We are in the process of migrating this forum. A new space will be available soon. We are sorry for the inconvenience.

Polskie znaki w MySQL


uded
27-05-2009, 19:36
Po pierwsze - MySQL to taki dziwny twór, w którym wszystko można skonfigurować. Ale zwykle nikt nie wie, jak to poprawnie zrobić. Więc luzik...

Po drugie - przy łączeniu się do MySQL to klient, de facto, powinien zdefiniować kodowanie znaków. Oczywiście są wartości domyślne, ale jak właśnie widać - różnie to z nimi bywa.

Po trzecie - PHP jest jakie jest. Ja generalnie trzymam się od niego na odległość kija, no chyba, że muszę. Ale wolę nie musieć. I trochę bez sensu jest API, w którym osobną komendą definiuje się zestaw znaków...

Ale podejdźmy do tego metodycznie - Szalony Żeglarzu, zapodaj mi swoją konfigurację:

mysql> SHOW VARIABLES LIKE 'character%';
mysql> SHOW CHARACTER SET;

Zobaczymy co tam masz ustawione faktycznie i co możesz ustawić...

vikingpl
21-05-2009, 13:10
http://tworzenie-stron-www.org/stron...a_stronach_www

Generalnie podejrzewam że dane nie są w latin2. Otwórz plik w jakimś edytorze i zobacz w jakim kodowaniu tak naprawdę jest zapis. A dla php header().

andriu-m
21-05-2009, 04:40
Kod:
default-character-set=latin2
character-set-server=latin2
default-collation=latin2_general_ci
collation-server=latin2_general_ci
init-connect='SET NAMES latin2'

mariano
27-04-2009, 09:57
Cytat Napisał madsailor
A czy można zmienić konfigurację PHP, żeby domyślnie używał latin2 ?
O ile mi wiadomo, nie jest to jeszcze mozliwe...

madsailor
27-04-2009, 09:46
Znalazłem php.ini.
Ale zamiana default na iso-8859-2
i zmiana mysql-character na iso-8859-2 i restart systemu nic nie zmieniły.

madsailor
27-04-2009, 09:01
A czy można zmienić konfigurację PHP, żeby domyślnie używał latin2 ?
W fedorze był plik php.ini w etc, w gentoo nigdzie nie znalazłem.

mariano
26-04-2009, 18:01
Cytat Napisał madsailor
No tak, ale to znaczy, że MySQL nadal jedzie na zestawie znaków innym niż latin2.
Jesli skonfigurowales tak, jak piszesz, to nie: wszystko jest na latin2. Ale oprocz kodowania bazy jest jeszcze kodowanie dla nawiazanego polaczenia - jego ustawienie zas jest zadaniem klienta (tu: skryptu php), bo to klient "wie", w jakim kodowaniu bedzie wysylal zapytania sql.

madsailor
26-04-2009, 17:42
Cytat Napisał mariano
Sprobuj mysql_set_charset. Jedna linijka kodu a rozwiazanie lepsze niz "set names".
No tak, ale to znaczy, że MySQL nadal jedzie na zestawie znaków innym niż latin2.

mariano
26-04-2009, 16:18
Sprobuj mysql_set_charset. Jedna linijka kodu a rozwiazanie lepsze niz "set names".

madsailor
26-04-2009, 15:37
Cytat Napisał borec
W /etc/mysql/my.cnf, w sekcji [mysqld] dodaj:
Kod:
init-connect='SET NAMES latin2'
i zrestartuj mysql.
Nie będziesz musiał tego robić w kodie PHP.
Mam już, niestety...

madsailor
26-04-2009, 14:17
Witam

Mam RPS-a z ovh-gentoo.
Baza jest w latin-2.
Bazy tworzyłem przez OHV jak i program MySQL Administrator (właczyłem widoczność bazy).
Zmieniłem też /etc/mysql/mysql.cnf - wszystkie latin1 na latin2 i przeładowałem.
Odtworzenie bazy z MySQL Administrator zawsze kończy się krzakami (mimo ustawień w programie na latin 2.
Dopiero załadowanie skryptu na serwer i odpalenie ręczne:
cat db_backup.sql | mysql --default-character-set=latin2 --host=88.88.88.88 --user=user1 --password=pass123 baza1
powoduje, że do bazy trafiły dane w latin2.
Niestety na stronie pokazują się nadal znaczki ?, mimo wydawania komend w bazie:
SET NAMES latin2;
SET CHARACTER SET latin2;
lub zmiany całej bazy na latin2:
ALTER DATABASE `test` DEFAULT CHARACTER SET latin2 COLLATE latin2_general_ci;

DZIAŁA TYLKO uruchamianie przed każdym zapytaniem w PHP poleceń:
mysql_select_db("test") or die("select database " . mysql_error());
mysql_query("SET NAMES latin2", $conn) or die("set names " . mysql_error());
mysql_query("SET CHARACTER SET latin2", $conn) or die("set character set " . mysql_error());

Wtedy na stronie jest OK. Czyli baza nadal działa w latin1 lub UTF, czy cholera wie w czym.
Jakieś pomysły ?

Pozdrawiam
Maciej

madsailor
26-04-2009, 14:07
Temat aż do bólu.