Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Błędy w formacie kodowania
Forum PHP.pl > Forum > Przedszkole
zimekk
Gdy korzystam z phpMyAdmin to w tabelach wszystkie dane wyświetlane są dobrze, czyli są polskie znaki. Natomiast gdy wysyłam zapytania przez Konsole MySQL w miejsce polskich znaków pojawiają się pytajniki.
Nie które zapytania działają poprawnie. np. jeżeli zadam zapytanie:
  1. $zapytanie = "select * from artykuly";

albo
  1. $zapytanie = "select * from artykuly where id = '1' and opublikowany is not null";

skrypt się wykona. Ale gdy zapytam:
  1. $zapytanie = "select * from artykuly where naglowek="$naglowek" and opublikowany is not null null order by opublikowany desc";

gdzie $naglowek to np. Płatki na śniadanie itp. Zostanie zwrócony komunikat taki jak poniżej:
  1. ERROR 1267 (HY000): Illegal mix of collations (latin2_general_ci,IMPLICIT) AND (
  2. latin1_swedish_ci,COERCIBLE) FOR operation '='


Może mi ktoś coś jeszcze doradzić??
Lion_87
A tak :
  1. $zapytanie = "select * from artykuly where naglowek='".$naglowek."' and opublikowany is not null order by opublikowany desc";
zimekk
Nie działa.

Ale zauważyłem że gdy pytam przez konsole MySQL i zmiennej $naglowek nie ma polskich znaków, to zapytanie wykonywane jest poprawnie. Z polskimi otrzymuje wynik "Empty set(0,00 sec)", chociaż element o takim nagłówku istnieje.
DREEMus
język składowy bazy jest ustawiony na "szwedzki" ... wejdź w my.ini i ustaw w parametrach "latin2_general_ci" zamiast "latin2_swedish_ci", restart MySQL i powinno śmigać smile.gif
zimekk
moj plik my.ini wyglada tak:
Kod
#WebServ - SKASOWANIE TEJ LINI OD GROZI RESTARTEM USTAWIEN!!!
#Uncomment or Add only the keys that you know how works.
#Read the MySQL Manual for instructions

[mysqld]
basedir=C:/Program Files/WebServ/mysql
#bind-address=
datadir=C:/Program Files/WebServ/mysql/data
language=C:/Program Files/WebServ/mysql/share/polish
#slow query log#=
tmpdir=C:/Program Files/WebServ/temp
port=3306
#set-variable=key_buffer=16M
character-set-server=latin2
default-character-set=latin2


ktora linike mam podmienic bo gdy zmienia "character-set-server=latin2" na "character-set-server=latin2_general_ci" i "default-character-set=latin2" na "default-character-set=latin2_general_ci". Wyskakuje mi bład:
  1. WEBSERV MONITOR - KONSOLA INFORMACYJNA
  2. Podczas uruchamiania MySQL napotkano nastepujacy blad:
  3. ======================================================
  4. WebServ(mysqld).exe: Character SET 'latin2_general_ci' IS NOT a compiled charact
  5. er SET AND IS NOT specified IN the 'C:\Program Files\WebServ\mysql\share\charset
  6. s\Index.xml' file
  7. 090614 0:46:52 [ERROR] Aborting
  8.  
  9. 090614 0:46:52 [Note] WebServ(mysqld).exe: Zako˝czenie dzia│ania wykonane
  10.  
  11. =======================
  12. Pomoc techniczna:
  13. [url="http://forum.webserv.pl"]http://forum.webserv.pl[/url]
  14. =======================
  15. Aby kontynuować, naciśnij dowolny klawisz . . .
zimekk
Cytat(cojack @ 14.06.2009, 08:49:05 ) *


Nie bardzo rozumiem ten tekst, słabo znam angielski. Ale jeśli chodzi o takie ustawienia jak: SET CHARSET i SET NAMES to dodałem już je.
tosiek
tuż po połączeniu z bazą w PeHaPie wykonaj zapytanie mysql query:
Kod
SET NAMES latin2 COLLATE latin2_geeral_ci

O ile ustawiłeś serwer na latin2 smile.gif i przestaw baze na latin2 winksmiley.jpg (w phpmyadminie w zakładce operacje)
cojack
jak używasz windowsa to kodowanie w cmd.exe masz cp-1250 i nie zmienisz.. jak uzywasz linuxa to szukaj recode, albo kodowanie, konsoli, terminala.
zimekk
Jeśli chodzi o kodowanie to korzystam z Notepad++ i koduje w utf-8 bez BOM, dodatkowo header i meta tez mam ustawione na utf-8. W pma system porównywania dla połączeń utf8_unicode_ci, a metoda porównywania napisów utf8_bin.

edit:

Dzięki za pomoc rozwiązałem problem. Po prostu nie mogę wprowadzać danych przez pma, bo jakoś dziwnie koduje mi te znaki.
DREEMus
Cytat(zimekk @ 14.06.2009, 23:08:26 ) *
Jeśli chodzi o kodowanie to korzystam z Notepad++ i koduje w utf-8 bez BOM, dodatkowo header i meta tez mam ustawione na utf-8. W pma system porównywania dla połączeń utf8_unicode_ci, a metoda porównywania napisów utf8_bin.


To i połączenie z bazą danych musisz mieć na UTF8, bo phpMyAdmin od v3.0 działa tylko w kodowaniu UTF-8.
zaraz po połączeniu z bazą dajesz
  1. <?php
  2. $char = mysql_set_charset ( 'utf8' ); // można też bez zmiennej :)
  3. // Uwaga, nie UTF-8, bez myślnika.
  4. ?>


I musi działać smile.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.