Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> kodowanie znaków - skrypt dobrze pobiera, źle wysyła
FakeRabbit
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 16.09.2010

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
borec
post
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 18.07.2003
Skąd: Tarnów

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


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?


--------------------
Gentoo Linux 64bit / PHP 5.2 / MySQL 5.1
-> Administracja serwerami Linux i FreeBSD
Go to the top of the page
+Quote Post
FakeRabbit
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 16.09.2010

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


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ć?

Ten post edytował FakeRabbit 17.09.2010, 12:56:12
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 Aktualny czas: 22.08.2025 - 09:42