ugrás a tartalomhoz

PHP 5.1.6 + Mysql 4.1.21 Win-en: Illegal mix of collations

Anonymous · 2006. Okt. 16. (H), 01.15
Hello!

Rövid leszek. Infok kb.:

mysql> SHOW variables like '%coll%';
collation_connection latin2_general_ci
collation_database   latin2_general_ci
collation_server     latin2_general_ci

mysql> SHOW variables like '%char%';
character_set_client      latin2
character_set_connection  latin2
character_set_database    latin2
character_set_results     latin2
character_set_server      latin2
character_set_system      utf8
...

Az adatbázisban minden tábla collationja latin2_hungarian_ci es a (VAR)CHAR típusú mezők CHARACTER SET-je latin2 Én hoztam létre őket így. Ehhez hasonló parancsokkal:
CREATE TABLE `felhasznalok` ( `username` varchar(20) CHARACTER SET latin2 collate latin2_hungarian_ci ... )
HTML/PHP-s infók:

head-ben szerepel ez:
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">
PHP info szerint:

default_charset no value

Ha olyat probalok INSERT-elni bele, amiben nincs "ű" vagy "ő" betű, addig minden rendben van. De ha van benne, akkor jön ez az error:

Illegal mix of collations (latin2_hungarian_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='

INSERT kb. igy nez ki:
<?php
mysql_query( "INSERT INTO bejegyzesek ( date,   cim,
                                                szoveg, kategoria )
                             VALUES           ( \"$InsDate\", \"$_POST[cim]\",
                                                \"$_POST[szoveg]\", \"$_POST[kat]\" )" )
Ami azért vicces, mert akármeddig túrtam bármilyen változókat, config file-okat sehol nem találtam latin1-es kódolást semmire. És _csak_ akkor jön elő a hiba van az insert-elt mezők között "ő" vagy "ű" betűt tartalmazó. Verzió számok a topic nevében. SET NAMES-et és SET CHARACTER SET-et próbáltam. Egyéb ötletem nincs.

Köszi a reakciókat, bye: nightw
 
1

PHP 5.1.6 + Mysql 4.1.21 Win-en: Illegal mix of collations

Anonymous · 2006. Okt. 22. (V), 15.55
Halihow!

Én is így jártam.
Nem tudom mi a megoldás.
Ha rájövök, akkor megírom.
Ha más jön rá hamarabb, akkor írja már meg ide plz!

Thx, Nil.
3

Megoldás a problémára...

alaci · 2007. Júl. 31. (K), 22.48
Szia,

A probléma nálam is előjött, a megoldás a következő:

Az oldal elejében melőtt bármilyen mysql lekérdezést indítanál rá kell kényszeríteni szerencsétlen mysql-t hogy a kliensel latin2 collation-t használjon:

set names latin2;
set character set latin2;
set collation_connection='latin2_general_ci';

Nálam ez megoldotta a problémát.

Üdv: Ambrus Laci
2

SET NAMES, SQL injection

Hojtsy Gábor · 2006. Okt. 22. (V), 18.29
Pedig a kapcsolat kódolásával van a gond, a SET NAMES lesz szerintem a megoldás. A hibaüzenet a tábla és a kapcsolat kódolását emeli ki inkompatibilisként.

Ha már ilyen szépen beküldted a kódod, akkor érdemes felhívni a figyelmed egy másik komoly problémára, mégpedig, hogy az SQL parancsod SQL injection támadás ellen védtelen (abból ítélve, amit itt látunk). Nem szabad űrlapból/sütiből/fájlból/stb érkező adatokat feltétel nélkül felhasználni, a mysql_escape_string() használata javasolt az értékekre az SQL parancsba szúrás előtt/közben.