[MySQL] Problem z polskimi znakami na ubuntu serwer


ForumKategoria: PHP i MySQL[MySQL] Problem z polskimi znakami na ubuntu serwer
szuflad zapytał 8 lat temu

Witam, wiem, że podobne tematy już się pojawiały, jednak mój problem <<wydaje mi się>> bardziej skomplikowany dlatego pozwolę sobie go przedstawić w osobnym wątku.
Całość wygląda tak, że pobieram dużą ilość rekordów z pliku excel przy pomocy biblioteki PHPExcel.
 
 

  1. function generuj () {
  2.  
  3. require_once ’Excel/reader.php’;
  4. $xls = new Spreadsheet_Excel_Reader();
  5. $xls->setOutputEncoding(’cp1250′);
  6. //$data->setOutputEncoding(’UTF-8′);
  7. $xls->read(’reklamacje-3.xls’);
  8.  
  9. for ($i = 2; $i <= $xls->sheets[0][’numRows’]; $i++) {
  10. for ($j = 1; $j <= $xls->sheets[0][’numCols’]; $j++) {
  11. if ($j == 4 || $j == 7) {
  12. $tymczas = $xls->sheets[0][’cells’][$i][$j];
  13. echo mb_detect_encoding($tymczas);
  14. $tablica = explode(„/”, $tymczas);
  15. $tablica_testowa[$j] = $tablica[2] . ’-’ . $tablica[1] . ’-’ . $tablica[0];
  16. } else {
  17. $tablica_testowa[$j] = strtr($xls->sheets[0][’cells’][$i][$j], „'”, ” „ );
  18. }
  19. //$komorka[$i][$j] = $xls->sheets[0][’cells’][$i][$j];
  20. }
  21. echo '<pre>’;
  22. // print_r($tablica_testowa);
  23. echo '<pre>’;
  24. db_connect();
  25. $ins = @mysql_query(„INSERT INTO testowa SET numer =’$tablica_testowa[1]’ , nazwa=’$tablica_testowa[2]’, nazwaspr=’$tablica_testowa[3]’, datawpl =’$tablica_testowa[4]’, status =’$tablica_testowa[5]’, decyzja =’$tablica_testowa[6]’, datadec =’$tablica_testowa[7]’, kwota =’$tablica_testowa[8]’, tresc =’$tablica_testowa[9]’, przyczyna =’$tablica_testowa[10]'”);
  26. }
  27.  
  28. // echo '<br />’;
  29. /// echo '<pre>’;
  30. //print_r($xls);
  31.  
  32. }

 
 
 
 
Całość działa świetnie po za polskimi znakami. Użyłem funkcji mb_detect_encoding do sprawdzenia kodowania. I ku mojemu zdziwieniu nie pojawia się cp1250 zadeklarowane wyżej tylko ACSII. Próbowałem użyć iconv do zmiany kodowania na np utf-8 ale nie działa. Po zapisie do bazy z wszystkimi chyba możliwymi metodami porównywania napisów brak polskich znaków.

Dodam, że serwer to środowisko serwer ubuntu z zainstalowaną bazą bez dodatkowych konfiguracji. Czy ktoś z was może mi pomóc w temacie? Będę wdzięczny za każdą wskazówkę, jeżeli potrzeba więcej informacji wszystko dokładnie mogę opisać.

1 odpowiedzi
Damian odpowiedział 8 lat temu

Chodzi o kodowanie znaków w bazie, Tworząc tabelę (zanim dodasz do niej rekordy) ustaw kodowanie znaków na utf-8 unicode ;p