Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Polskie znaki - zrobilem wszystko co mozliwe
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam,


Mecze sie z problemem od 3 dni, zrobilem wszystko co trzeba, przeczytalem wszystkie informacje na forum o polskich znakach , skonfigurowalem odpowiednio baze, serwer, pliki notepada++, wszystko na utf8 collation utf8_polish_ci.

Najdziwniejsze jest to ze polskie znaki z tej samej tabeli z roznych kolumn wyswietlaja sie różnie.

Oto eksport z phpMyAdmina :
  1. <?php
  2. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  3.  
  4.  
  5. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  6. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  7. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  8. /*!40101 SET NAMES utf8 */;
  9.  
  10. --
  11. -- Baza danych: `comicsite`
  12. --
  13.  
  14. -- --------------------------------------------------------
  15.  
  16. --
  17. -- Struktura tabeli dla  `char_main`
  18. --
  19.  
  20. CREATE TABLE IF NOT EXISTS `char_main` (
  21.  `id` int(11) NOT NULL AUTO_INCREMENT,
  22.  `alias` varchar(40) COLLATE utf8_polish_ci NOT NULL DEFAULT '',
  23.  `real_name` varchar(80) COLLATE utf8_polish_ci NOT NULL DEFAULT '',
  24.  `lair_id` int(11) NOT NULL DEFAULT '0',
  25.  `align` enum('dobry','zły') COLLATE utf8_polish_ci NOT NULL DEFAULT 'dobry',
  26.  PRIMARY KEY (`id`)
  27. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=8 ;
  28.  
  29. --
  30. -- Zrzut danych tabeli `char_main`
  31. --
  32.  
  33. INSERT INTO `char_main` (`id`, `alias`, `real_name`, `lair_id`, `align`) VALUES
  34. (1, 'Albert Grey', '', 1, 'dobry'),
  35. (2, 'Maks Pchełka', '', 4, 'dobry'),
  36. (3, 'John Reed', '', 5, 'dobry'),
  37. (4, 'FreshMan', 'Billy Fisher', 14, 'dobry'),
  38. (5, 'Superman', 'Clarck Kent', 15, 'dobry'),
  39. (6, 'Baranina', 'Jak Kowalski', 18, 'zły'),
  40. (7, 'Hektor', 'Muhamad Abdul', 19, 'zły');
  41. ?>


Jak widać mamy ti dwa przypadki, jeden to Maks PcheÅ‚ka (Maks Pchełka) z kolumny real_name drugi przypadek to "zły" z kolumny align.
Najdziwniejsze jest to ze gdy odpalam strone Maks PcheÅ‚ka wyświetla sie prawidłowo zaś "zły" wyswietla sie ze znakiem zapytania zamiast literki "ł" exclamation.gif

Dodam ze słowo zły jest przetwarzane przed wyświetleniem w tabeli przez str_replace w ten oto sposob :
  1. <?php
  2. $table .= '</table>';
  3.        $table = str_replace('zły',
  4.                             '<font color="red">zły</font>',
  5.                             $table);
  6.        $table = str_replace('dobry',
  7.                             '<font color="darkgreen">dobry</font>',
  8.                             $table);
  9. ?>

zaś Maks Pchełka wyswitelany jest w ten sposob :
  1. <?php
  2. $table .= '<tr bgcolor="#'.$bg.'">'.
  3.                      '<td><a href="charedit.php?c='.$row['id'].'">'.
  4.                      $row['alias'].'</a></td><td>'.
  5. ?>

Gdzie $row['alias'] jest wartościa pobierana z bazy danych

Ludzie pomozcie , juz pytalem znajomych programistow kogo sie dało i nic......wstawie 100x pomogł za pomoc sciana.gif
redelek
Przed zapytaniem a po połączeniu do bazy daj sobie coś takiego
  1. <?php
  2. mysql_query("SET NAMES UTF-8");
  3. ?>


Ja tak mam dopisane przed dodaniem i pobieraniem danych i wszystko działa poprawnie.
Zobacz jakie kodowanie ma Twój serwer to też częsta przyczyna.

Pozdrawiam
Redelek
pianta_d
Ja mam u siebie troszkę rozszerzone

  1. <?php
  2. mysql_query("SET CHARACTER latin2", $connection);
  3. mysql_query("SET NAMES latin2", $connection);
  4. mysql_query("SET CHARACTER_SET latin2", $connection);
  5. ?>


i u mnie działa. Zmień sobie odpowiednie wartości i też powinno hulać. guitar.gif
Wolfie
Mam to dopisane, i dzieki temu wogle sie wyswietla, bo wczesnie wogole sie nei wyswietlalo nawet ze znakiem zapytania, a co do serwera to tez ustawiony raczej na utf8, mozesz jeszcz powiedziec gdzie to sie sprawdza zebym sie upewnił....

pianta_d przed chwila tez dodałem to co napisales wyzej mimo ze wszystkie wartosci mam ustawione w bazie bankowo na utf8, dopisalem oczywiscie swoja wersje czyli z utf8 ale nic sie nie zmienilo.....
pianta_d
Sprawdzasz w phpmyadmin

Zacytuje kiedyś dawno pisany wątek z tego rofum.

- przed pierwszym zapytaniem do bazy mam mysql_query('SET NAMES LATIN2');
- kodowanie w meta mam iso-8859-2 (zapisane przez jakiś edytor, a nie notatnik)
- system kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
- system porównań dla połączenia MySQL: UTF8_Unicode_ci
- metoda porównywania napisów: latin2_general_ci
Wolfie
Ale ja to wszystko mam juz ustawione na utf8, przeciez pisalem ze od 3 dni sie z tym borykam......notepad , bazy danych i cala ta reszta jest usawiona na utf8.....

Zreszta tak jak mowilem w pierwszym poscie, nawet z tej samej tabeli literki polskie wyswietlaja sie poprawnie, z innych tabel na tej samej stronie tez poprawnie tylko z tej jednej kolumny dane wstawiaja sie ze znakiem zapytania....wiec widac wyraznie ze serwer i cala reszta jest skonfigurowana poprawnie, dlatego podejrzewam ze cos jest nie tak przez funkcje str_replace bo to w zasadzie jedyna roznica przy przetwarzaniu danych tam gdzie wyswietla sie zle.....
pianta_d
Nie wiem czy nie będziesz musiał wyedytować wpisów, które już masz w bazie.

Ja kiedyś też miałem podobny. Wtedy zrobiłem tak, że wyedytowałem każdy wpis do bazy poprawiając w odpowiednim kodowaniu, oczywiście jeśli wpisów jest mało.
Jeśli u masz dużo wpisów, skorzystaj z Gżegżółki
Wolfie
Tak , mogłbym to wyedytowac ale wstawiajac nowe dane przez formularz na stronie do bazy danych powtorzy sie ten sam problem.....a ja bym chcial naprawic przyczyne a nie skutek winksmiley.jpg
pianta_d
A może masz problem z kodowanie tego konkretnego pola questionmark.gif
Wolfie
Kodowanie dla tej tabeli i dla kolumny tej tabali tez jest usawione na utf8.....

No i znowu wszyscy mnie olali sad.gif
pianta_d
Znalazłem coś takiego convert
Wolfie
No tak tylko po co mam konwertowac z utf8 na utf8 .... ?
pianta_d
A zamiast utf8_polish_ci daj utf8_general_ci
Wolfie
ale tylko w tej kolumnie tabeli gdzie wyswietla sie zle ?
athei
Cytat(pianta_d @ 7.05.2009, 16:03:08 ) *
A zamiast utf8_polish_ci daj utf8_general_ci


Nie ma sensu. Utf8_general_ci ma problemy przy wyrazach zaczynających się od polskiej litery np.Łódź i źle je sortuje dając je na końcu.
zelu
A nie korzystasz z jakiś funkcji operujących na stringach przed zapisaniem ich w bazie? Np strtolower(), albo coś podobnego? Takie funkcje też lubią namieszać.


Pozdro
Wolfie
Tak jak napisalem w pierwszym poscie, korzystam z funkcji str_replace, w pierwszym poscie widac dokładnie jak to jest zastosowane.....
zelu
Ale to jest funkcja, której używasz do wyświetlania danych. A mi chodziło od etap, pomiędzy pobraniem nazwy z pola input, a wstawieniem jej do bazy.
Wolfie
Nie, przed wstawieniem do bazy nie przetwarzam zadna funkcja.....

W skrypcie pobierajacym dane wyswietlilem tablice danych ktore pobieram z formularza i wygląda ona poprawnie, wszystko ładnie z polskimi literami :

Cytat
Array ( [alias] => Wilkołak [name] => Robert Drake [powers] => Array ( [0] => 24 [1] => 27 ) [address] => ul. Krótka [city] => Łódź [state] => ŁD [zip] => 93-222 [align] => zły [action] => Utwórz postać [cid] => 0 ) 1
zelu
A jak dodasz jakąś następną osobę z polskimi znaczkami to też jest coś pomieszane? I spróbuj dodać coś przez PhpMyAdmina... Daj znać czy również są błędy
Wolfie
Teraz juz sie wszystko powalilo, wstawiłem nową postać zarówno przez formularz jak i phpMyAdmina, w phpMyAdmin wszystko wygląda ładnie i literki wyswietlaja sie poprawnie za to na stronie wszedzie znaki zapytania, nawet w tych kolumnach gdzie wczesniej bylo dobrze to teraz wstawia sie a raczej wyświetla źle......

"Stare" komórki z polskimi znakami wyswietlaja sie poprawnie....
zelu
Wniosek z tego jeden winksmiley.jpg Masz skopane połączenie skrypt-baza. Inaczej mówiąc musisz nie mieć, albo mieć coś skopane przy SET NAMES. Jeszcze inaczej mówiąc zaraz za połączeniem z baza i wybraniem tabeli musisz mieć

  1. <?php
  2. mysql_query("SET NAMES 'UTF8'");
  3. ?>


Wstaw/zmień i daj znać co i jak winksmiley.jpg
Wolfie
U mnie w skrypcie wygląda to tak:

  1. <?php
  2. $conn = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS)
  3.  or die('Błąd połączenia z baza danych. ' . mysql_error());
  4.  
  5. mysql_select_db(SQL_DB, $conn);
  6. mysql_query('SET NAMES utf8');
  7. ?>


Nowe postacie ciagle wyswietlaja sie ze znakami zapytania.....
zelu
Z tego co widzę (mam tę samą książkę winksmiley.jpg ) połączenia z bazą odbywają się w kilku miejscach (dosłownie w kilku plikach). Masz wszędzie ustawione SET NAMES?
Wolfie
Ja pie..le zadziałało exclamation.gif laugh.gif

Jesteś bogiem exclamation.gif yahoo.gif

Wstawiam 3x pomogł, jako jedyny naprawde zainteresowałeś sie moim problemem , jak chcesz wiecej "pomogł" to mow tongue.gif
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.