Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Polskie znaki w PDO
Dominator
post 30.07.2013, 13:30:12
Post #1





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Witam
Mam problem związany z PDO. Mianowicie do bazy danych nie chcą mi się dodawać polskie znaki. Kodowanie tabelki mam ustawione na utf8_polish_ci.

  1. $pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', '', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'latin2'"));


I MYSQL_ATTR_INIT_COMMAND również nie działa.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
kw95s
post 30.07.2013, 13:43:53
Post #2





Grupa: Zarejestrowani
Postów: 36
Pomógł: 3
Dołączył: 10.07.2011

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


Set names daj na UTF-8 , a w bazie wszystko na utf_8_unicode_ci
Metodę porownywania połączeń tez
Go to the top of the page
+Quote Post
Dominator
post 30.07.2013, 13:51:43
Post #3





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


A metodę porównywania połączeń jak zmienić?
Go to the top of the page
+Quote Post
kw95s
post 30.07.2013, 14:05:28
Post #4





Grupa: Zarejestrowani
Postów: 36
Pomógł: 3
Dołączył: 10.07.2011

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


Cytat(Dominator @ 30.07.2013, 14:51:43 ) *
A metodę porównywania połączeń jak zmienić?

Na str. Głównej PMA
Każdy wiersz w tabeli ma być na unicode
Go to the top of the page
+Quote Post
Dominator
post 30.07.2013, 14:15:07
Post #5





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Metoda porównywania połączeń: utf8_unicode_ci
Prawie każdy wiersz w tabeli ma: utf8_unicode_ci (prawie, bo mam 2 wiersze INT)
Kod prezentuje się następująco:

  1. $pdo = new PDO('mysql:host=localhost;port=3306;dbname=test', '', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
  2. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  3. $pdo->query('SET NAMES UTF8');
  4. $pdo->query('SET CHARACTER SET UTF8');


Rezultat: polskie znaki tj. źćż zamienia na "?"
Go to the top of the page
+Quote Post
kw95s
post 30.07.2013, 14:21:05
Post #6





Grupa: Zarejestrowani
Postów: 36
Pomógł: 3
Dołączył: 10.07.2011

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


META
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8"/>
Walnij to do htmla
Spróbuj bez set names
Go to the top of the page
+Quote Post
Dominator
post 30.07.2013, 15:29:37
Post #7





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Cytat(kw95s @ 30.07.2013, 15:21:05 ) *
META
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8"/>
Walnij to do htmla
Spróbuj bez set names


W grę wchodzi tylko PHP. Po co mam dawać w htmlu tą metę, skoro już w bazie nie ma polskich znaków?

---
Pomoże ktoś?
Go to the top of the page
+Quote Post
viking
post 30.07.2013, 16:27:44
Post #8





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Wyeksportować z bazy, przekonwertować jakimś sensownym edytorem do poprawnego kodowania czyli UTF8, zaimportować. Ustawić nagłówki w konfiguracji serwera albo przez header. Nie bawić się w badziewie PMA. Mało jest edytorów?


--------------------
Go to the top of the page
+Quote Post
Crozin
post 30.07.2013, 16:28:14
Post #9





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Porównywanie znaków (nie żadnych połączeń) nie ma żadnego związku z samymi krzaczkami. Jak sama nazwa wskazuje parametr ten nie określa kodowania znaków, a sposób ich porównywania, czyli przykładowo czy znak "L" ma być traktowany jako równy znakowi "ł".
2. Nie ma właściwie żadnego konkretnego argumentu dla użycia kodowania ISO-8859-2 (latin2) zamiast Unikodu (kodowanego UTF-8) w nowych projektach. Lata 90-te i 10-te (dziwnie to brzmi smile.gif dawno już minęły.
3. Każda kolumna powinna mieć nadane kodowanie UTF-8. Możesz również ustawić je jako domyślne kodowanie wszystkich tabel i samej bazy danych - dzięki temu nowe kolumny/tabele automatycznie przyjmą to samo kodowanie. Nie mniej jednak, jeżeli zmieniasz kodowanie istniejącej kolumny musisz jeszcze zmienić zawartość każdej z komórek - sama zmiana kodowania nie konwertuje objętego nim tekstu. Google: MySQL iconv
4. Kodowanie dla połączenia z bazą danych (PDO) ustawia się w DNS-ie PDO: mysql:host=...;dbname=...;charset=utf8;, nie trzeba korzystać z dodatkowych zapytań.
5. Oczywiście jeszcze dane przesyłane ze skryptu również muszą być kodowanie UTF-8 dlatego też zarówno pliki powinieneś zapisać w kodowaniu UTF-8 jak i stronę wyświetlać w tym kodowaniu (kodowanie w nagłówku Content-Type oraz w elemencie <meta /> HTML-a).
Go to the top of the page
+Quote Post
Dominator
post 30.07.2013, 16:36:00
Post #10





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Dzięki chłopaki, naprawione guitar.gif
Problem tkwił w tym, że miałem źle zakodowany plik index.php, był w on kodowaniu ANSI biggrin.gif DZIĘKI JESZCZE RAZ!
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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 17:45