• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z polskimi znakami przy wyciąganiu danych z MySQL - bez UTF-8

Object Storage Arubacloud
0 głosów
1,984 wizyt
pytanie zadane 7 sierpnia 2017 w SQL, bazy danych przez swagimir Nowicjusz (190 p.)
edycja 7 sierpnia 2017 przez swagimir

Cześć,

mam problem z wyciąganiem danych z MySQL'a (celem strony jest wyświetlenie danych w formacie JSON). Kodowanie znaków w MySQL mam utf8_unicode_ci wszędzie (baza, tabele i kolumny), kodowanie pliku .php mam też utf-8 i nie chce działać. Dodawanie do bazy mi działa odkąd zaraz po połączeniu wykonuje się zapytanie:

$db->query("SET NAMES 'utf8'");

Wcześniej też nie chciało działać.

 

Teraz mam problem z wyciąganiem danych bo nic nie pomaga. Ogólnie pliki edytuje w Sublime 2 ale specjalnie pobrałem Notepada++ żeby sprawdzić kodowanie pliku i jest ustawione UTF-8 bez BOM.

 

Pierwszy raz mam taki problem. Wcześniej się z czymś takim nie spotkałem. Dodatkowo dziwne jest to że po ustawieniu meta charset na cp-1250 (dokument cały czas UTF-8 bez BOM) to wyświetla polskie znaki, ale z kolei przy kodowaniu do formatu JSON znowu pojawiają się krzaki zamiast liter. 

 

PS. Do łączenia z bazą używam PDO.

 

Może ktoś się spotkał z czymś podobnym?

 

 

Edit:

Do utworzenia obiektu PDO używam:

$db = new PDO("mysql:host=". $hostname .";dbname=" .$databasename, $username, $password, array(  
	        PDO::ATTR_EMULATE_PREPARES => false,  
	        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
	    	)  
    	);

 

Tutaj też próbowałem zmieniać wszystko na utf8:

ale po restarcie serwera 2 wartości wróciły na latin1, więc może to coś tu jest nie tak.

1 odpowiedź

0 głosów
odpowiedź 7 sierpnia 2017 przez WireNess Stary wyjadacz (11,240 p.)
Kodowanie tabel i bazy danych ustaw na:

utf8_polish_ci

 

Powinno pomóc ;)
komentarz 7 sierpnia 2017 przez swagimir Nowicjusz (190 p.)

Dzięki za odpowiedź. Próbowałem utworzyć nową bazę i wszędzie ustawić utf8_polish_ci i wyciągnąć z niej dane z polskimi znakami i też nie zadziałało frown

komentarz 7 sierpnia 2017 przez WireNess Stary wyjadacz (11,240 p.)
To musi zadziałać! ;D

Pokaż screen bazy danych :D
komentarz 7 sierpnia 2017 przez swagimir Nowicjusz (190 p.)

Tu mam to co jest ustawione obecnie czyli utf8_unicode_ci. Zaraz zrobię jeszcze raz na utf8_polish_ci.

komentarz 7 sierpnia 2017 przez WireNess Stary wyjadacz (11,240 p.)
Skończyły mi się opcje ;/ nie mam pojęcia co tu może być nie tak ;/ U mnie wszystko działa
komentarz 7 sierpnia 2017 przez swagimir Nowicjusz (190 p.)

Utworzyłem nową bazę na utf8_polish_ci i tabela wygląda tak:

 

Tak wygląda skrypt wybierąjacy dane z bazy:

<?php
	header('Content-Type: text/html; charset=utf-8');

	require('databaseConnection.php');

	try{
		$db = new PDO("mysql:host=". $hostname .";dbname=". $databasename, $username, $password, array(  
	        PDO::ATTR_EMULATE_PREPARES => false,  
	        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
	    	)  
    	);

		$query = "select * from tabela;";

		$result = $db->query($query);

		while ($row = $result->fetch(PDO::FETCH_ASSOC)){
			echo "Imie: ".$row["imie"];
		}


	} catch (PDOException $e){
		echo $e->getMessage();
	}

	die();
?>

A wynik w przeglądarce wygląda tak:

komentarz 7 sierpnia 2017 przez manjaro Nałogowiec (37,390 p.)

A w pliku index.php masz dobrze nagłówek?

<!DOCTYPE html>
<html lang="pl">

<head>
    <meta charset="utf-8">

 

komentarz 7 sierpnia 2017 przez swagimir Nowicjusz (190 p.)

W momencie gdy zwracam JSONy nie mogę deklarować heada bo JSONy  są źle zczytywane - musi być czysta treść. Charset trzeba deklarować przez funkcję header w PHP. 

 

Generalnie problem częściowo rozwiązałem. Musiałem dodać 5 linijek w pliku konfiguracyjnym w /etc/mysql/my.cnf. Zmieniły mi się kodowania w MySQL i wyświetla mi polskie znaki, ale teraz z kolei nie pokazuje mi polskich znaków gdy wynik z bazy jest formatowany do JSONów indecision

komentarz 7 sierpnia 2017 przez efiku Szeryf (75,160 p.)
edycja 7 sierpnia 2017 przez efiku

dodaj do polaczenia PDO charset=utf8  ..?

Charset trzeba deklarować przez funkcję header w PHP. 

Nie, nie trzeba.

Ja jakoś od dawna nie miałem problemów z kodowaniem.

Pracuje w PHPStorm, który automatycznie tworzy mi pliki z kodowaniem utf-8. Podczas połączenia za pomocą PDO informuje, że uzywam charset = utf-8.  Po stronie html'a w szablonie ustawiam tylko meta i jakoś działa. 

komentarz 7 sierpnia 2017 przez swagimir Nowicjusz (190 p.)
Już śmiga. Przy funkcji json_encode oprócz JSON_PRETTY_PRINT dodałem JSON_UNESCAPED_UNICODE. Mam nadzieje że problem już jest permanentnie rozwiązany bo straciłem na to kilkanaście dobrych godzin.

Dzięki za wszelką pomoc ;)

Podobne pytania

0 głosów
1 odpowiedź 505 wizyt
0 głosów
0 odpowiedzi 533 wizyt
pytanie zadane 17 października 2017 w SQL, bazy danych przez dominiv2604 Początkujący (350 p.)
0 głosów
0 odpowiedzi 127 wizyt

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...