Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] import z pliku .DBF do MySQL
Forum PHP.pl > Forum > Przedszkole
pa-jong
Witam,
Napotkałem na problem którego już nie ogarniam...

kilka suchych faktów..

Kodowanie Bazy - latin2_general_ci
Kodowanie tabel - latin2_general_ci
metoda porównywania napisów - latin2_general_ci

kodowanie pliku php - UTF-8 bez BOM ( za pomocą notepad++)
kodowanie pliku .DBF - cp852

meta charset ustawione na ISO-8859-2

poniżej skrypt, który importuje zawartość .DBF do mysql
kodowanie pliku DBF zmieniam w locie z cp852 na ISO-8859-2

  1. $records = @dbase_numrecords($dbf) or die("Error reading DBF's number of fields");
  2. for($x = 1; $x <= $records; $x++)
  3. {
  4. $record = dbase_get_record($dbf, $x);
  5. $strSql = "REPLACE INTO ".$table." VALUES (";
  6. $f = 0;
  7. foreach($record as $field)
  8. {
  9. if($f != 0) $strSql .= ", ";
  10. if(strcmp(str_repeat(' ', $fields[$f]['length']), $field) != 0)
  11. {
  12. if($fields[$f]['type'] == 'character') $strSql .= "'";
  13. $strSql .= $field;
  14. if($fields[$f]['type'] == 'character') $strSql .= "'";
  15. }
  16. else
  17. $strSql .= "NULL";
  18. if(++$f >= $fields_num) break;
  19. }
  20. $strSql .= ");";
  21. $strSql = iconv("CP852","ISO-8859-2",$strSql);
  22. mysql_query($strSql, $conn);
  23.  
  24. print($strSql);
  25.  
  26. }


Najdziwniejszym dla mnie jest to, że to działa z powodzeniem na serwerach linuxpl...
problem pojawił się przy próbie odpalenia tego skryptu na localhoście...

w obydwu przypadkach po zmianie (iconv) na ISO-8859-2
print wyrzuca polskie znaki poprawnie,
niestety do bazy na localhoście ( sprawdzając przez phpMyAdmina ) dostają się pytajniki i apostrofy.. (why?)

Próbowałem już chyba wszystkich znanych mi kombinacji i jak do tej pory poległem...
podrzuci mi ktoś jakiś pomysł gdzie szukać rozwiązania ?
xavierek
jakie masz ustawione kodowanie pliku ? poczytaj temat polskie znaki mysql smile.gif poszukaj różnic
dodadkowo radze dodać linijke jakie jest kodowanie storny bo czasami pomaga wszedzie musza być ustawione te same kodowania
pa-jong
tak jak pisałem

kodowanie pliku php ze skryptem który ładuje wszystko do bazy - utf-8 bez bom
kodowanie pliku źródłowego .DBF cp852
zaraz przed importem do MySQL robie iconv z cp852 na ISO-8859-2

temat o kodowaniu czytałem juz nie raz..
próbowałem też przy ustawieniu wszystkiego na UTF-8
plik baza tabele iconv wszystko na UTF-8 - bez rezultatu w każdym przypadku brak polskich znaków



kombinowałem dalej..
zamiast ładować od razu do bazy zrobiłem z tego CSV ( kodowanie CSV w UTF-8 )
po odczytaniu tej CSVki notatnikiem w środku brak polskich znaków..

OK wszystko jasne zatem przed zapisem do CSV zmieniam iconv z cp852 -> ISO-8859-2 na cp852 -> UTF-8
wszystko hula -> robię ręcznie import do MySQL - działa

w takim razie wracam do bezpośredniego importu z DBF -> MySQL ( skrypt z pierwszego postu)tym razem zmieniając iconv na cp852 -> UTF-8
odpalam skrypt, patrzę do admina brak polskich znaków... i nadal stoję w miejscu sad.gif
c1chy
A po połączeniu z bazą ustawiłeś poprawny zestaw znaków ? np poprzez SET NAMES utf8; ?
pa-jong
Cytat(c1chy @ 27.11.2013, 03:47:14 ) *
A po połączeniu z bazą ustawiłeś poprawny zestaw znaków ? np poprzez SET NAMES utf8; ?


nie ustawiłem wink.gif
jak zwykle okazuje się, że najwięcej problemu sprawiają najbardziej błahe rzeczy...


Dzięki wink.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.