Foutmelding: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations
Ik voer het volgende stukje script uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
try
{
$dal = new Dal();
$db = $dal->maakVerbindingSite();
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "select naam, nummer from tbl_contacts WHERE naam = :naam";
$stmt = $db->prepare($sql);
$stmt->bindParam(':naam', $naam, PDO::PARAM_STR);
$stmt->execute();
$contact = $stmt->fetchAll();
return $contact;
}
catch(PDOException $e)
{
echo '<pre>';
echo 'Regel: '.$e->getLine().'<br>';
echo 'Bestand: '.$e->getFile().'<br>';
echo 'Foutmelding: '.$e->getMessage();
echo '</pre>';
}
?>
try
{
$dal = new Dal();
$db = $dal->maakVerbindingSite();
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "select naam, nummer from tbl_contacts WHERE naam = :naam";
$stmt = $db->prepare($sql);
$stmt->bindParam(':naam', $naam, PDO::PARAM_STR);
$stmt->execute();
$contact = $stmt->fetchAll();
return $contact;
}
catch(PDOException $e)
{
echo '<pre>';
echo 'Regel: '.$e->getLine().'<br>';
echo 'Bestand: '.$e->getFile().'<br>';
echo 'Foutmelding: '.$e->getMessage();
echo '</pre>';
}
?>
Het is een redelijk eenvoudige query. Nu wil het geval dat Firefox hier geen problemen mee geeft, maar als ik in IE10 de volgende naam erin schiet : zübli dan geeft hij de volgende melding:
Foutmelding: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
(ik roep dit aan met een jquery ajax request en stuur de naam dan mee als parameter)
Nu heb ik deze melding gegoogled en daar wordt verteld dat mijn tabellen allemaal dezelfde collation moeten hebben. Nu heb ik dit gecontroleerd en ze zijn allemaal dezelfde collation dus ik weet eerlijk gezegd niet meer waar ik verder moet gaan zoeken. Ik vindt het ook vreemd dat Firefox dus de melding niet geeft maar IE weer wel.
Heeft iemand enig idee waar ik het moet gaan zoeken? Bedankt!
Is de databaseverbinding ook dezelfde collatie? Zet dat in je connection string, dus zoiets als "mysql:host=localhost;dbname=test;charset=utf8"
Dan is de code die je postte waarschijnlijk niet de plek waar het misloopt.
Staan al je database tables in "CHARACTER SET utf8 COLLATE utf8_unicode_ci" ?
Als dat het geval is, zorg dan ook dat je dit in je broncode hebt staan:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
Misschien helpt het; ik garandeer niets
$db = new PDO('mysql:host=localhost;dbname=****', '****', '****',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
dus dat moet wel goed zijn denk ik.
De collatie staat als:
latin1_swedish_ci bij elke tabel ik zal het proberen naar utf8_unicode_ci om te zetten.
Ik laat morgen wel weten of het is gelukt :)
Maak wel een backup voor je die collatie omzet.... het kan nare bijwerkingen hebben....