Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mysql i utf-8 raz jeszcze
Forum PHP.pl > Forum > Bazy danych > MySQL
miki555
Witam wszytskich. Na wstępie zaznaczam że nie dam spokoju dopóki ktoś mi nie pomoże rozwiązać tego problemu. Wiem że temat rzeka i że jak wpisze hasło kodowanie polskich znaków to wywala pełno na ten temat. Tylko że jak dotad a szukam już od dwóch dni, nie znalazłem sensownego rozwiązania.
Sytuacja ma się następująco:
1. Na pokładzie mam apache 2.0.55 php5 i mysql 5.0.16. W bazie domyślne kodowanie jest latin1 oraz metodę porównań latin1_swedish_ci
  1. SHOW VARIABLES LIKE 'character_set%';
  2. +--------------------------+----------------------------+
  3. | Variable_name | Value |
  4. +--------------------------+----------------------------+
  5. | character_set_client | latin1 |
  6. | character_set_connection | latin1 |
  7. | character_set_database | latin1 |
  8. | character_set_results | latin1 |
  9. | character_set_server | latin1 |
  10. | character_set_system | utf8 |
  11. | character_sets_dir | /usr/share/mysql/charsets/ |
  12. +--------------------------+----------------------------+
  13. SHOW VARIABLES LIKE 'collation%';
  14. +----------------------+-------------------+
  15. | Variable_name | Value |
  16. +----------------------+-------------------+
  17. | collation_connection | latin1_swedish_ci |
  18. | collation_database | latin1_swedish_ci |
  19. | collation_server | latin1_swedish_ci |
  20. +----------------------+-------------------+

Domyślnie dane w bazie wyświetlają sie poprawnie, lecz po przestawiniu php i apache na kodowanie utf dane pobierane z bazy wyświetlają znaki '?' w miejsach polskich znaków. Próbowałem już chyba wszytskiego:

Wpisywałem w mysql:
  1. SET CHARACTER SET utf8;
  2. SET NAMES utf8;

Lecz to powodowowało ze miałem nawet krzaczki w bazie. Dodam, że dane wklejam prosto z notatnika, wiec chyba żadne konwersje nie są potrzbne.
Probowałem ustawić domyślne kodowanie utf na tabelach np.
  1. CREATE TABLE kierunki
  2. (
  3. id_kierunek INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  4. kod VARCHAR(10) NOT NULL,
  5. nazwa VARCHAR(50) NOT NULL
  6. )ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;

Też nic nie dało
Przy polączeniach bazą wykonywałem
  1. mysql_query('SET NAMES utf8');

Co jedynie spowodowało, że krzaczki zamieniły sie w inne krzaczki.
Przedstawiłem pokrótce co mniejwiecej próbowałem, ale żadanego eftku nie osiągnełem. Co robie źle co jest nie tak. Czy potrzebne są jakies konwersje skoro wkelejam tabele wraz z danymi z notatnika? Proszę o nie zamykanie tego tematu, ale na fachową pomoc. Z góry dziekuję
mariuszn3
Jedyne co mi przychodzi do głowy to to, że dane w tabeli masz zapisane w innnym kodowaniu niż jej przypisane.
radekl
zobacz czy masz w ../shared/mysql pik utf8.xml
ja nie mam a chyba powinien być właśnie walczę z podobnym problem do twojego
SongoQ
@miki555 Zrobil bym to w nastepujacy sposob.

Zrzut tabel pozniej konwersja do utf-8 tak zeby kodowanie w bazie bylo poprawne i zapisane krzaczki tez. Nastepnie podczas zapytania wymusic kodowanie dla sesji, klienta. (SET)

Mam nadzieje ze CI to pomoze, jak nie to pisz na forum.
miki555
No więc tak wlaczylem z tym cały dzień i mniej wiecej coś poradzilem. Ustawilem domyślne w konfiracji mysql kodowanie utf8. Wyrzucilem cała baze (drop database) i stworzylem od nowa. Potem zainstalowalem phpmyadmina i zaiportowalem baze z pliku wybierajac przy tym kodowanie utf8 i to pomogło, Dodam ze tabelki tworzylem w taki sposób:
  1. CREATE TABLE kierunki
  2. (
  3. id_kierunek INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  4. kod VARCHAR(10) NOT NULL,
  5. nazwa VARCHAR(50) NOT NULL
  6. )ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;

Potem jeszcze przy polaczaniu z baza dodalem zapytanie
mysql_query('SET NAMES utf8');
To pomogło, ale teraz mam inny problem. Nie wiem czemu (wczesniej mialem kodowaine iso i w takiej postaci byly dokumnety. Przekowertowalem je na utf8 i chyba gdzie niegdzie cos sie sypnelo bo w iinternet explorerze moja stronka sie rozwala jakby jakies dodatkowe znaki sie wawalily (nie chodzi mi o polskie litery bo są poprawne) jakies duze odstepy sie porobily miedzy tabelami nie wiem czemu. Pod firefoexem jest wporzadku. Co to moze byc?
mariuszn3
może jakiś link daj...?
miki555
NIe mam żadnego linku ponieważ strona nie istnieje jeszcze w internecie. Kolejna sprawa jak zakoduje indeks.php w utf to wywala mi sie session_start() a jak dam ansi to jest ok
Używam notepad++ . Ja chyba oszaleje. Wszytsko mi sie chrzani. Help!!!!
mr.r
Cytat(miki555 @ 29.09.2006, 01:04:54 ) *
NIe mam żadnego linku ponieważ strona nie istnieje jeszcze w internecie. Kolejna sprawa jak zakoduje indeks.php w utf to wywala mi sie session_start() a jak dam ansi to jest ok


Prawdopodobnie edytor wstawia do pliku trzybajtowy naglowek BOM, teoretycznie jest to zachowanie poprawne, jednak powoduje problemy.

Wyrzuc z poczatku pliku te bajty: 0xEF, 0xBB, 0xBF i powinno byc wszystko ok.
SongoQ
Jesli baza dziala z domyslnym kodowaniem utf-8 i klienta tez tak dziala to nie musisz slac kodowania do bazy.
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.