Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kodowanie znaków - skrypt dobrze pobiera, źle wysyła
Forum PHP.pl > Forum > Bazy danych > MySQL
FakeRabbit
Witam
Piszę w tej chwili dość prosty skrypt, który pobiera pewne dane z jednej tabeli mysql, następnie deserializuje je i wrzuca spowrotem do bazy do drugiej tabeli.
tutaj uproszczony kod:
  1. $mysql = mysql_connect($adresIP, $user, $pass);
  2. if($mysql) {
  3. mysql_query('SET NAMES "utf8"');
  4. mysql_query('SET CHARACTER SET "utf8"');
  5.  
  6.  
  7. mysql_query("DROP TABLE IF EXISTS tmp_params");
  8. mysql_query("DROP TABLE IF EXISTS q_parameters");
  9. mysql_query("CREATE TABLE tmp_params (param varchar (500), value varchar (500)) CHARSET=UTF8");
  10. $quest_options = mysql_query('SELECT details FROM questions');
  11. while($row=mysql_fetch_object($quest_options)){
  12. $opt = unserialize($row->details);
  13.  
  14. echo $opt['zakres'].'</br>';
  15. mysql_query("INSERT INTO tmp_params VALUES ('zakres', '".$opt['zakres']."')");
  16. mysql_query("INSERT INTO tmp_params VALUES ('podzakres', '".$opt['podzakres']."')");
  17. mysql_query("INSERT INTO tmp_params VALUES ('poziom', '".$opt['poziom']."')");
  18.  
  19. }
  20. mysql_query("DELETE FROM tmp_params where value = ''");
  21. mysql_query("CREATE TABLE q_parameters CHARSET=UTF8 AS SELECT DISTINCT * FROM tmp_params");
  22. mysql_query("DROP TABLE tmp_params");
  23. echo 'ok';
  24. }


problem polega na tym, że do bazy treści trafiają już z krzaczkami zamiast polskich znaków. Kodowanie jak widać ustawiłem na utf8 i do skryptu dane trafiają tak jak powinny - z polskimi znakami, więc problem musi być przy przesyłaniu ich spowrotem. Jakieś sugestie co może być nie tak?
borec
1. Ta tymczasowa tabela jest zbędna, po prostu załóż UNIQUE na (param,value) i INSERT zamień na INSERT IGNORE, dane nie będą się powtarzały, a przed INSERT sprawdź czy wartości nie są puste.
2. Skąd masz pewność, że dane po przetworzeniu są krzakami? Jak to sprawdzasz? W phpMyAdmin?
FakeRabbit
Cytat
2. Skąd masz pewność, że dane po przetworzeniu są krzakami? Jak to sprawdzasz? W phpMyAdmin?

Sprawdzam w phpmyadmin i w platformie Efront, która korzysta z tej tabeli. Może jeszcze sprecyzuję - nie krzaczki, tylko znaki zapytania.
Co do tabeli tymczasowej - przyznaję, że specjalistą od SQLa nie jestem, więc zrobiłem to najprościej jak się dało winksmiley.jpg Na prędkości wykonania i pożeraniu pamięci mi nie zależy, bo uruchomić skrypt muszę właściwie tylko raz na ok 1000 rekordów. Zresztą to chyba nie ma żadnego wpływu na opisany problem?

Edit:
Zauważyłem w phpmyadmin, że tabele są kodowane w utf8, wszystkie kolumny też, ale cała baza ma kodowanie latin1_swedish_ci. Czy problem może tkwić w tym? A jeśli tak, to jak temu zaradzić?
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.