PHP 5.1.6 + Mysql 4.1.21 Win-en: Illegal mix of collations
Hello!
Rövid leszek. Infok kb.:
Az adatbázisban minden tábla collationjaHTML/PHP-s infók:
head-ben szerepel ez:PHP info szerint:
Ha olyat probalok
INSERT kb. igy nez ki: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
■ 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
...
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 ... )
head-ben szerepel ez:
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">
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]\" )" )
Köszi a reakciókat, bye: nightw
PHP 5.1.6 + Mysql 4.1.21 Win-en: Illegal mix of collations
É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.
Megoldás a problémára...
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
SET NAMES, SQL injection
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.