Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Import danych do MySQL z Excela przez PMA i problem z kodowaniem
kecajs
post 27.10.2019, 19:02:39
Post #1





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 23.04.2010

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


Dzień dobry,
od dwóch dni przekopuję się przez książki, fora i rózne dokumentacje odnośnie sytuacji, w której się znalazłem, jednkaże - bez sukcesu.
Tak wygląda sytuacja.
Strona jest kodowana w utf8, w phpMyAdmin kodowanie znaków serwera ustawione jest na UTF-8 Unicode (utf8) i jest jeszcze w ustawieniach ogólnych parametr "Sortowanie połączenia z serwerem", ustawione na utf8_general_ci. Z kolei metoda porównywania napisów w samej bazie jest ustawiona na utf8_general_ci, choć doczytałem, że nie jest to parametr kluczowy, bo nei określa strony kodowej.
Dane utworzone i zapisane zostały w MS Excel. Na potrzeby bazy zapisałem plik jako CSV (rozdzielany przecinkami), następnie w Notepad++ przekonwertowałem zawartość na format UTF-8 i zapisałem. Tak przygotowany wsad zaimportowałem do MySQL, wykorzystując PMA. Przy imporcie kodowanie znaków pliku ustawione były jako utf-8, zaś format - CSV. Po imporcie polskie znaki w bazie są prawidłowo interpretowane.
Problem pojawia się, kiedy dane z bazy zaciągane są na stronę www. Na chwilę obecną wszystko robione jest lokalnie, z wykorzystaniem ostatniej wersji aplikacji WebServ (wersje: Apache 2.2.22; PHP 5.3.20; MySQL 5.5.21; Perl 5.14.2; MySQL Control 0.9.4; phpMyAdmin 3.5.5).
Dodatkowo, śladem porad z forum dokonałem konwersji strony kodowej zarówno bazy, jak i tabel komendami:
  1. ALTER DATABASE 'nazwa' DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

  1. ALTER TABLE 'tabela' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Bez zmian. Do łączenia się z bazą korzystam ze skryptu, wykorzystującego klasę dbconn o treści:
  1. <?php
  2.  
  3. abstract class Singleton {
  4.  
  5. protected static $_instance;
  6.  
  7. protected function __construct() {
  8.  
  9. }
  10.  
  11. public static function instance() {
  12.  
  13. }
  14.  
  15. }
  16.  
  17. class dbconn extends Singleton {
  18.  
  19. private $_conn;
  20. private $server = 'localhost';
  21. private $login = 'user';
  22. private $password = 'pass';
  23. private $database = 'database';
  24.  
  25. protected function __construct() {
  26. $this->_conn = mysql_connect($this->server, $this->login, $this->password) or die(mysql_error());
  27. mysql_select_db($this->database, $this->_conn) or die(mysql_error());
  28. }
  29.  
  30. public static function instance() {
  31. if (is_null(self::$_instance)) {
  32. self::$_instance = new dbconn();
  33. }
  34. return self::$_instance;
  35. }
  36.  
  37. public function query($query) {
  38. return mysql_query($query);
  39. }
  40.  
  41. public function insert($query) {
  42. if (mysql_query($query)) {
  43. } else {
  44. return 0;
  45. }
  46. }
  47.  
  48. public function select($query) {
  49. return mysql_num_rows(mysql_query($query));
  50. }
  51.  
  52. public function escape($string) {
  53. return htmlspecialchars(strip_tags($string));
  54. }
  55.  
  56. }
  57. ?>

Czytałem, że mozna zmienić kodowanie podczas łączenia się z bazą, ale nie mam pojęcia jak i w którym miejscu.
Będę wdzięczny za konstruktywne wskazówki, bez odsyłania do innych postów, for, czy porad "w ciemno" - wiele z nich już przerabiałem.
Pozdrawiam,
Jacek
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kecajs
post 28.10.2019, 22:00:44
Post #2





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 23.04.2010

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


Na chwilę obecną zmieniłem serwer lokalny na XAMPP, zaś dostęp do bazy odbywa się poprzez mysqli - faktycznie okazało się to prostrze. Jednakże pojawił się problem przy imporcie danych z pliku CSV. Struktura bazy składa siez dwóch tabel (8 i 11 kolumn), bez A.I. bo pierwsza kolumna to "lp", a baza jest stała - nic do niej nie będzie dodawane, chodzi tylko o łatwiejszy sposób prezentacji, niż robienie tabeli na ok. 400 wierszy. Dlatego też nie dokładałem pustej pierwszej kolumny, jak to zalecają na różnych forach. Podczas importu pojawił się błąd "Niewłaściwa suma kolumn w CSV w linii 1". W poprzedniej wersji serwera - WebSerw, nie było żadnych problemów z importem. Na wszelki wypadek jednakże dołożyłem pustą kolumnę i zaczytana został pierwszy wiersz i pojawił się komunikat błędu "Niewłaściwa suma kolumn w CSV w linii 2". NIe mam pojęcia, co namieszałem i gdzie robię błąd. Będę wdzięczny za podpowiedź jak powinieniem zaimportować dane z arkusza Excela do bazy przez phpMyAdmina.

OK, temat ogarnięty, polskie znaki są, połączenie z bazą również - wykorzystałem mysqli.
Podsumowując, problem polegał na zastosowaniu starego oprogramowania (WinServ) i nie obsługiwanej już funkcji -mysql(). Zamiana serwera na XAMPP i wykorzystanie funkcji mysqli() rozwiązało całkowicie problem. Temat do zamknięcia.

Ten post edytował kecajs 28.10.2019, 22:14:52
Go to the top of the page
+Quote Post

Posty w temacie


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 Wersja Lo-Fi Aktualny czas: 28.04.2024 - 09:12