Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][PHP]Kodowanie polskich znaków w bazie danych
Demoneos
post 1.05.2010, 11:04:44
Post #1





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 26.02.2008

Ostrzeżenie: (0%)
-----


Sczytuję treść strony www w taki sposób:
  1. $strona = file("adres_strony");

i następnie zapisuje interesujące mnie fragmenty do bazy danych za pomocą SQLa. Wszystko działa prawidłowo oprócz kodowania polskich znaków - tzn. na stronie www są oczywiście polskie znaki ale po skopiowaniu do bazy danych już ich niema. Dodam, że ta strona źródłowa z której sczytuję treść ma kodowanie iso-8859-2.
W phpMyAdmin jest taka opcja "Metoda porównywania napisów" i można przypisać różne wartości poszczególnym polom - próbowałem różnych: UTF-8, ascii-bin, uft8_polish_ci, ale nie pomagało.

Jest jakiś sposób, żeby polskie znaki było odpowiednio kodowane w bazie danych?

Ten post edytował Demoneos 1.05.2010, 11:05:34


--------------------
Go to the top of the page
+Quote Post
minolone
post 1.05.2010, 11:21:45
Post #2





Grupa: Zarejestrowani
Postów: 141
Pomógł: 24
Dołączył: 21.06.2008

Ostrzeżenie: (0%)
-----


Poszukaj na forum i w google, takich tematów było już dosyć dużo i ciągle są kolejne bo nikomu sie nie chce szukać, i polecam poczytac o iconv(), oraz tutaj.
Go to the top of the page
+Quote Post
Demoneos
post 1.05.2010, 14:33:19
Post #3





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 26.02.2008

Ostrzeżenie: (0%)
-----


Będąc zalogowanym w mysql.exe wpisuję następujące zapytania:
  1. ALTER DATABASE nazwa bazy DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
  2. ALTER TABLE nazwa tabeli DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;



Następnie w skrypcie php wstawiłem takie instrukcje:
  1. $conn = mysql_connect("localhost", "login", "haslo");
  2. mysql_select_db("nazwa bazy", $conn);
  3.  
  4. mysql_query("SET NAMES 'utf8';");
  5. mysql_query('SET CHARACTER SET utf8;');
  6.  
  7. $strona = file("adres_strony"); // strona kodowana jest w iso-8859-2
  8.  
  9. // wyciągam ze zmiennej $strona odpowiedni kod i zapisuję go do różnych zmiennych, np. $imiona
  10.  
  11. $imiona_utf8 = iconv("iso-8859-2","utf-8", $imiona);
  12.  
  13. // wstawiam zmienną $imiona_utf8 do tabeli znajdującej się w odpowiedniej bazie danych


Polskich znaków wciąż nie ma w bazie danych. Czy zrobiłem coś źle?

EDIT:
Właściwie to problem jest już w samym skrypcie php - po użyciu funkcji:
  1. $imiona_utf8 = iconv("iso-8859-2","utf-8", $imiona);

kiedy w następnej linijce skryptu wyświetlam tą zmienną:
echo $imiona_utf8;
to już tutaj nie ma polskich znaków (są krzaczki w ich miejsce).

Jak to możliwe? Przecież funkcja iconv() ma służyć właśnie temu, żeby prawidłowo przekonwertować znaki z jednego kodowania do drugiego.

Ten post edytował Demoneos 1.05.2010, 14:34:44


--------------------
Go to the top of the page
+Quote Post
Matimor
post 1.05.2010, 14:41:46
Post #4





Grupa: Zarejestrowani
Postów: 287
Pomógł: 10
Dołączył: 22.08.2009

Ostrzeżenie: (0%)
-----


Cytat
- Sprawdź kodowanie strony, przed zapytaniem użyj
  1. header("Content-Type: text/html; charset=UTF-8");

- Zmień kodowanie tabeli i bazy na `utf_polish_ci`
- Sprawdź czy w danej kolumnie nie są wpisane krzaczki, moze być tak, że masz wszystko dobrze ale krzaczki zostały ze starego kodowania
- Użyj przed zapytaniem
  1. mysql_query("SET NAMES utf8");


--------------------
Go to the top of the page
+Quote Post
Demoneos
post 5.05.2010, 18:23:41
Post #5





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 26.02.2008

Ostrzeżenie: (0%)
-----


Matimor - zrobiłem tak jak napisałeś i na localhoście wszytko działało idealnie. Niestety kiedy przerzuciłem stronę wraz z bazą danych na konto na serwerze home.pl, zamiast polskich znaków są krzaczki. Baza danych w której są tabele dla mojej strony www ma odpowiednie kodowanie porównywania napisów - "utf-unicode_ci". Na serwerze znajduje się jeszcze inna baza "information_schema" i ma inne kodowanie porównywania napisów - "utf-general_ci" (widać to na poniższym obrazku) i niestety nie mogę tego zmienić. Może to jest powodem problemów?

(zamazałem tylko nazwę bazy w której są tabele dla moje strony www)

Ten post edytował Demoneos 5.05.2010, 18:24:57


--------------------
Go to the top of the page
+Quote Post
krzysztof_kf
post 5.05.2010, 18:36:50
Post #6





Grupa: Zarejestrowani
Postów: 1 135
Pomógł: 158
Dołączył: 19.03.2009
Skąd: Toruń

Ostrzeżenie: (0%)
-----


Nie sądzę jakie masz kodowanie dla tabel i rekordów od tego bym zaczął masz polskie znaki w pliku .sql questionmark.gif jeśli tak to ok jeśli nie to spróbuj przekonwertować bazę danych programem gżegrzółką może to ci pomoże .

Ten post edytował krzysztof_kf 5.05.2010, 18:37:34
Go to the top of the page
+Quote Post
Demoneos
post 6.05.2010, 10:54:03
Post #7





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 26.02.2008

Ostrzeżenie: (0%)
-----


Cytat(krzysztof_kf @ 5.05.2010, 19:36:50 ) *
Nie sądzę jakie masz kodowanie dla tabel i rekordów od tego bym zaczął masz polskie znaki w pliku .sql questionmark.gif


Jak można to najprościej sprawdzić?

Cytat(krzysztof_kf @ 5.05.2010, 19:36:50 ) *
jeśli tak to ok jeśli nie to spróbuj przekonwertować bazę danych programem gżegrzółką może to ci pomoże .


A konkretnie jakie pliki mam przekonwertować? Kojarzę coś, że tabele są zapisywane w plikach .MYD, .MYI i .frm, więc może te?


W ostateczności, po przeczytaniu tego poradnika:
http://blog.mwojcik.pl/2006/10/08/polskie-znaki-w-mysql/
zadziałało smile.gif smile.gif
Prawdopodobnie wcześniej przy imporcie tabeli źle ustawiłem kodowanie (opcja "Zestaw znaków dla pliku:") i stąd były te krzaczki.

PS Już bardziej tego nie mogli zamotać smile.gif


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 19:34