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");
"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;