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:
ALTER DATABASE 'nazwa' DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
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:
<?php abstract class Singleton { protected function __construct() { } } } class dbconn extends Singleton { private $_conn; private $server = 'localhost'; private $login = 'user'; private $password = 'pass'; private $database = 'database'; protected function __construct() { } self::$_instance = new dbconn(); } return self::$_instance; } public function query($query) { } public function insert($query) { } else { return 0; } } public function select($query) { } public function escape($string) { } } ?>
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