Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ta sama baza danych, 2 serwery, na jednym nie ma polskich znakow
Forum PHP.pl > Forum > Bazy danych > MySQL
jankomuzykant
Witam,

Mam baze danych MySQL testdb.

Posiadam 2 serwery, oba uzywaja tej samej bazy danych w sensie ten sam IP bazy danych etc - doslownie ta sama baza danych.

Na pierwszym serwerze (PHP 5.4) polskie znaki wyciagane z MySQL wyswietlaja sie dobrze.

Na drugim (PHP 7) (ktory uzywa tej samej bazy), polskie znaki wyciagane z MySQL sa tzw. krzakami.

Na obu serwerach polskie znaki w statycznym tekscie w plikach php sa wyswietlane OK.

Na drugim serwerze probowalem wszystkich opcji:

Kod
'SET CHARACTER_SET utf8_unicode_ci'
"SET CHARSET utf8"
"SET NAMES `utf8` COLLATE `utf8_polish_ci`
mysqli_set_charset($conn, "utf8");


Uzywa mysqli.

Dzieki z gory za pomysly! ;-)

Wow.

Linijka:
Kod
var_dump(mysqli_get_charset($conn));


Gdzie conn jest mysqli instance.

Server 1 daje:
Kod
object(stdClass)#3 (8) { ["charset"]=> string(6) "latin1" ["collation"]=> string(17) "latin1_swedish_ci"


Server 2 daje:
Kod
object(stdClass)#2 (8) { ["charset"]=> string(4) "utf8" ["collation"]=> string(15) "utf8_general_ci"


Na server 2 dodalem po laczeniu do db:
Kod
mysqli_set_charset($conn, "latin1");


Teraz server 2 var_dump na mysqli_get_charset pokazuje tak jak na server 1.
Kod
object(stdClass)#2 (8) { ["charset"]=> string(6) "latin1" ["collation"]=> string(17) "latin1_swedish_ci"



I teraz polskie znaki sie wyswietlaja....... dziwne i niewarygodne przygody......

Takto ogolnie:

HTML Header jest taki:
Kod
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">


Wszystkie tabele CREATE TABLE skrypty maja
Kod
DEFAULT CHARSET=utf8

Deklaracja tworzenia bazy danych z backupu jest
Kod
CREATE DATABASE `testdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Pyton_000
Rozumiem że problem rozwiązałeś ? smile.gif

PS. Edytuj swojego posta i powywalaj zbędne entery z bloków CODE (chyba że to jakiś ciekawy błąd forum)
jankomuzykant
Hej @Pyton_000

Problem rozwiazany - pytanie pozostaje, czemu latin1 musze dac na mysqli skoro schema, table i wszystko inne jest utf8?

Bloki CODE maja tylko ten kod, zero zbednych spacji, wyglada ze to bugietka na forum. ;-)
Pyton_000
Czyli jest 1 serwer z BD, i 2 serwery aplikacyjne.

na tych 2 serwerach jest dokładnie taka sama aplikacja ? (1:1)
nospor
Cytat
Bloki CODE maja tylko ten kod, zero zbednych spacji, wyglada ze to bugietka na forum. ;-)
Jakbys uzywal CODE zamiast CODEBOX to by zadnej bagietki nie bylo... tongue.gif (patrz dwa ostatnie poprawione CODEBOXy przezemnie)
jankomuzykant
Cytat(Pyton_000 @ 11.05.2016, 11:02:29 ) *
Czyli jest 1 serwer z BD, i 2 serwery aplikacyjne.

na tych 2 serwerach jest dokładnie taka sama aplikacja ? (1:1)


Tak, Pyton_000, 1:1, juz nie bo na server 2 musze dawac latin1 po tworzeniu mysqli

Cytat(nospor @ 11.05.2016, 11:08:22 ) *
Jakbys uzywal CODE zamiast CODEBOX to by zadnej bagietki nie bylo... tongue.gif (patrz dwa ostatnie poprawione CODEBOXy przezemnie)


Dzieki @nospor - poprawione! :-)

To przez to ze w panelu "Szybki dostep" podczas edycji zmienic jest "Wstaw: CODEBOX", mozna by zmienic/lub dodac na "Wstaw: CODE"?
Pyton_000
Czyli wychodzi na to że Domyślnie serwer SQL zapodaje na Latin1, PHP5.4 także, a PHP7 na UTF-8. Dlaczego? Nie wiem. Porównaj phpinfo() z obu serwerów a może tam się ukaże prawda smile.gif
jankomuzykant
Cytat(Pyton_000 @ 11.05.2016, 11:55:46 ) *
Czyli wychodzi na to że Domyślnie serwer SQL zapodaje na Latin1, PHP5.4 także, a PHP7 na UTF-8. Dlaczego? Nie wiem. Porównaj phpinfo() z obu serwerów a może tam się ukaże prawda smile.gif


phpinfo nie ma zadnych referencji do latin1

Ale:

Kod
mysql> show variables like 'character%';


Na testdb daje:

Kod
character_set_client     utf8
character_set_connection     utf8
character_set_database     utf8
character_set_filesystem     binary
character_set_results     utf8
character_set_server     latin1
character_set_system     utf8


Nadal, tabele i schema etc sa utf8 na testdb. Skoro sa w utf8, uzywajac
Kod
mysqli_set_charset($conn, "latin1");
nie powinno dawac polskich znakow na server 2... ale daje... Dziwne, dziwne...

http://php.net/manual/en/mysqli.set-charset.php ustawia character_set_client

Wyglada na to ze server 1 musi wewnetrznie jakos zmieniac character_set_client na latin1 (character_set_client na testdb jest utf8 domyslnie) i server 2 musi wywolac mysqli_set_charset aby character_set_client byly takie same jak character_set_server??

Wyglada na to ze skoro testdb uzywa latin1 character_set_server, pomimo faktu ze tabele i schema sa utf8 i character_set_client jest utf8, nowy server 2 musi mysqli_set_charset na latin1 zeby bylo jak character_set_server na testdb, wiecej na temat:

https://tosiek.pl/o-co-chodzi-z-latin1-i-dl...-polskie-znaki/

Co za przygody! ;-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.