Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]Kodowanie polskich znaków w bazie danych
Forum PHP.pl > Forum > Przedszkole
Demoneos
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?
minolone
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.
Demoneos
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.
Matimor
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");
Demoneos
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)
krzysztof_kf
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 .
Demoneos
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
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.