Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MySQL 4.1 i UTF-8
Forum PHP.pl > Forum > Bazy danych > MySQL
Ozzy
Próbuję nakłonić MySQL 4.1.7 do zwracania stringa z polskimi znakami, niestety pojawiają się krzaczki:)
Zmieniłem "System porównań" na utf8_general_ci, chociaż nie wiem czy to ma jakieś znaczenie...

Jeśli chodzi o samego Apache'a i php,to z utf-8 nie ma problemów, tzn print "ąęśćźń" wyświetla to co powinien.
Po wykonaniu zapytania do MySQL'a (przez mysqli) zawartość zmiennej nie zawiera już polskich znaków, więc problem musi leżeć po stronie bazy.
PhpMyAdmin poprawnie wyświetla zawartość rekordów, tyle, że nie mogę dojść czym sobie na to zasłużył smile.gif

Ma ktoś jakiś pomysł? Mi już się wyczerpały...
mpps
spróbuj zmienić na utf8_polish_ci... chociaż nie wiem, czy to coś pomoże, bo ostatnio też zaczynam mieć z tym problem... jak zacznie mi za bardzo przeszkadzać, to dam znać winksmiley.jpg
Ozzy
Też próbowałem, efekt ten sam:) W każdym razie dzięki za chęci:)
dooshek
Cytat(Ozzy @ 2004-12-05 23:24:03)
Też próbowałem, efekt ten sam:) W każdym razie dzięki za chęci:)

Jesli nie uzywasz rozszerzenia mysqli ktore ma do ustawiania kodowania polaczenia jakas funkcje to wykonaj po prostu gdzies zaraz po polaczeniu z baza:

SET NAMES 'latin2';

jesli chcesz miec dane w latin2.

Nie wiem czy dobrze zrozumialem - moze nie ale w razie co mam obcykane trzymanie w bazie UTFowych tekstow i pozniej je wyciaganie, collation itd. wiec w razie co wal - moze pomoge.

Sorki, ze tak nieskladnie i nieladnie - napisz czego potrzebujesz dokladnie to pomoge... ale juz jutro winksmiley.jpg
Ozzy
Używam mysqli, znalazłem funckję mysqli_character_set_name (mysqli_client_encoding), ale ona tylko zwraca kodowanie, nie można za jej pomocą tego ustawić. (zwraca latin1_swedish_ci zamiast utf8_general_ci) Nie można jakoś tego ustawić w MySQL/mysqli żeby nie trzeba się było martwić?
W SHOW VARIABLES mam wszystko na utf8 ustawione.
Edit: Nie wiem czy to normalne, ale zmienne w SHOW VARIABLES przy każdym uruchomieniu MySQL resetują się, jak temu zapobiec?
dooshek
Cytat(Ozzy @ 2004-12-06 15:05:03)
Używam mysqli, znalazłem funckję mysqli_character_set_name (mysqli_client_encoding), ale ona tylko zwraca kodowanie, nie można za jej pomocą tego ustawić. (zwraca latin1_swedish_ci zamiast utf8_general_ci) Nie można jakoś tego ustawić w MySQL/mysqli żeby nie trzeba się było martwić?
W SHOW VARIABLES mam wszystko na utf8 ustawione.
Edit: Nie wiem czy to normalne, ale zmienne w SHOW VARIABLES przy każdym uruchomieniu MySQL resetują się, jak temu zapobiec?

ustaw sobie w my.cnf czy tez my.ini

default-character-set=utf8

do tego, zobacz jakies masz kodowanie tabel ktore pozakladales - prawdopodobnie bedziesz mial latin2.... - musisz to zmienic - czesto tez musisz zmienic wszystkie kolumny na UTF-8 jesli chcesz w nich trzymac UTFowe dane. Jesli wczesniej miales poustawiane latin2... to wtedy musisz na pewno to zmienic.

Zrob sobie:

mysql> show create table site_users;

powinno Ci sie pokazac m.in. cos takiego:

CREATE TABLE `site_users` (
`id` int(10) unsigned NOT NULL auto_increment,
`id_skin` int(10) unsigned NOT NULL default '0',
`login` varchar(50) default NULL,
`password` varchar(20) character set utf8 collate utf8_bin default NULL,
`imie` varchar(255) default NULL,
`nazwisko` varchar(255) default NULL,
`email` varchar(255) default NULL,
`adres` varchar(255) default NULL,
`kod_pocztowy` varchar(6) default NULL,
`miejscowosc` varchar(100) default NULL,
`telefon` varchar(255) default NULL,
`user_group` int(11) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `LOGIN` (`login`),
KEY `SKIN` (`id_skin`),
KEY `GROUP` (`user_group`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |

Oczywiscie u mnie jest juz poprawnie - czyli jest UTF8 w polu DEFAULT CHARSET.
Jesli chcesz to zmienic to:

mysql> alter table site_users convert to character set utf8;

Uwazaj jednak bo MySQL przekonwertuje rowniez wszystkie kolumny z kodowania w ktorym miales na UTF8!


Z Manuala:
Cytat
From MySQL 4.1.2 on, if you want to change all character columns (CHAR, VARCHAR, TEXT) to a new character set, use a statement like this: ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;

This is useful, for example, after upgrading from MySQL 4.0.x to 4.1.x. See section 10.10 Upgrading Character Sets from MySQL 4.0. Warning: The preceding operation will convert column values between the character sets. This is not what you want if you have a column in one character set (like latin1) but the stored values actually use some other, incompatible character set (like utf8). In this case, you have to do the following for each such column: ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;

The reason this works is that there is no conversion when you convert to or from BLOB columns. To change only the default character set for a table, use this statement: ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;

The word DEFAULT is optional. The default character set is the character set that is used if you don't specify the character set for a new column you add to a table (for example, with ALTER TABLE ... ADD column). Warning: From MySQL 4.1.2 and up, ALTER TABLE ... DEFAULT CHARACTER SET and ALTER TABLE ... CHARACTER SET are equivalent and change only the default table character set. In MySQL 4.1 releases before 4.1.2, ALTER TABLE ... DEFAULT CHARACTER SET changes the default character set, but ALTER TABLE ... CHARACTER SET (without DEFAULT) changes the default character set and also converts all columns to the new character set.


Dodatkowo poczytaj sobie tutaj http://dev.mysql.com/doc/mysql/en/Charset.html - przydaje sie bardzo. Pewnie nie wszystkie Twoje watpliwosci rozwialem ale troche zajety jestem - w razie co pisz jeszcze.

Ogolnie ja robie tak, poniewaz nie uzywam mysqli jeszcze to ustawiam kodowanie z Mysqlem poprzez wykonanie na poczatku gdzies zaraz po polaczeniu z baza:

SET NAMES 'utf8';

i jesli tylko mam dobrze wszystko w bazie to wszystko co zapisze sie do bazy w UTF-8 potrafie pozniej wyswietlic na stronie w UTF8.
Ozzy
Działa! SET NAMES pomogło. Dzięki Ci dobry dooshku!
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.